web-dev-qa-db-fra.com

Comment extraire un élément d'un tableau dans pyspark

J'ai une trame de données avec le type suivant

col1|col2|col3|col4
xxxx|yyyy|zzzz|[1111],[2222]

Je veux que ma sortie suive le type

col1|col2|col3|col4|col5
xxxx|yyyy|zzzz|1111|2222

Mon col4 est un tableau et je veux le convertir en une colonne séparée. Ce qui doit être fait?

J'ai vu beaucoup de réponses avec flatmap mais elles augmentent une ligne, je veux juste que le Tuple soit placé dans une autre colonne mais dans la même ligne

Voici mon schéma réel:

root
 |-- PRIVATE_IP: string (nullable = true)
 |-- PRIVATE_PORT: integer (nullable = true)
 |-- DESTINATION_IP: string (nullable = true)
 |-- DESTINATION_PORT: integer (nullable = true)
 |-- collect_set(TIMESTAMP): array (nullable = true)
 |    |-- element: string (containsNull = true)

Peut également plaire à quelqu'un de m'aider avec des explications sur les cadres de données et les RDD

10
AnmolDave

Créez des exemples de données:

from pyspark.sql import Row
x = [Row(col1="xx", col2="yy", col3="zz", col4=[123,234])]
rdd = sc.parallelize([Row(col1="xx", col2="yy", col3="zz", col4=[123,234])])
df = spark.createDataFrame(rdd)
df.show()
#+----+----+----+----------+
#|col1|col2|col3|      col4|
#+----+----+----+----------+
#|  xx|  yy|  zz|[123, 234]|
#+----+----+----+----------+

Utilisez getItem pour extraire l'élément de la colonne du tableau comme ceci, dans votre cas réel, remplacez col4 Par collect_set(TIMESTAMP):

df = df.withColumn("col5", df["col4"].getItem(1)).withColumn("col4", df["col4"].getItem(0))
df.show()
#+----+----+----+----+----+
#|col1|col2|col3|col4|col5|
#+----+----+----+----+----+
#|  xx|  yy|  zz| 123| 234|
#+----+----+----+----+----+
23
Psidom