Bir satır ve birkaç sütun içeren bir veri çerçevem var. Bazı sütunlar tek değerdir, diğerleri ise listelerdir. Tüm liste sütunları aynı uzunluktadır. Liste dışı bir sütunu olduğu gibi tutarken, her liste sütununu ayrı bir satıra ayırmak istiyorum.Pyspark: Satırlara çoklu dizi sütunlarını bölme
Numune DF:
df = sqlc.createDataFrame([Row(a=1, b=[1,2,3],c=[7,8,9], d='foo')])
# +---+---------+---------+---+
# | a| b| c| d|
# +---+---------+---------+---+
# | 1|[1, 2, 3]|[7, 8, 9]|foo|
# +---+---------+---------+---+
Benim istediğim:
+---+---+----+------+
| a| b| c | d |
+---+---+----+------+
| 1| 1| 7 | foo |
| 1| 2| 8 | foo |
| 1| 3| 9 | foo |
+---+---+----+------+
Ben sadece bir liste sütunu, bu sadece bir explode
yaparak kolay olacağını olsaydı:
df_exploded = df.withColumn('b', explode('b'))
# >>> df_exploded.show()
# +---+---+---------+---+
# | a| b| c| d|
# +---+---+---------+---+
# | 1| 1|[7, 8, 9]|foo|
# | 1| 2|[7, 8, 9]|foo|
# | 1| 3|[7, 8, 9]|foo|
# +---+---+---------+---+
Ancak, explode
c
sütununu da kullanmaya çalışırsam, bir dataf ile sonuçlanırım. uzunluğunda ne istiyorum karesini Rame:
df_exploded_again = df_exploded.withColumn('c', explode('c'))
# >>> df_exploded_again.show()
# +---+---+---+---+
# | a| b| c| d|
# +---+---+---+---+
# | 1| 1| 7|foo|
# | 1| 1| 8|foo|
# | 1| 1| 9|foo|
# | 1| 2| 7|foo|
# | 1| 2| 8|foo|
# | 1| 2| 9|foo|
# | 1| 3| 7|foo|
# | 1| 3| 8|foo|
# | 1| 3| 9|foo|
# +---+---+---+---+
I istediğim şey - her sütun için, o sütundaki dizinin inci elemanını almak ve yeni bir satıra eklemek. Bir dataframe tüm sütunlara genelinde patlayabilir haritalama denedim ama bu da işe görünmüyor: DataFrames
ile
df_split = df.rdd.map(lambda col: df.withColumn(col, explode(col))).toDF()