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
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|
#+----+----+----+----+----+