Dataframe 如何在PySpark'中拆分具有逗号分隔值的列;什么是数据帧?

Dataframe 如何在PySpark'中拆分具有逗号分隔值的列;什么是数据帧?,dataframe,pyspark,Dataframe,Pyspark,我有一个PySpark数据框架,其中的列包含逗号分隔的值。列包含的值的数量是固定的(例如4)。 例如: +----+----------------------+ |col1 | col2| +----+----------------------+ |1 | val1,val2,val3,val4| |2 |瓦尔1,瓦尔2,瓦尔3,瓦尔4| |3 | val1,val2,val3,val4| |4 | val1,val2,val3,val4| +----+-------------------

我有一个PySpark数据框架,其中的列包含逗号分隔的值。列包含的值的数量是固定的(例如4)。 例如:

+----+----------------------+
|col1 | col2|
+----+----------------------+
|1 | val1,val2,val3,val4|
|2 |瓦尔1,瓦尔2,瓦尔3,瓦尔4|
|3 | val1,val2,val3,val4|
|4 | val1,val2,val3,val4|
+----+----------------------+
在这里,我想将col2拆分为4个独立的列,如下所示:

+----+-------+-------+-------+-------+
|col1 | col21 | col22 | col23 | col24|
+----+-------+-------+-------+-------+
|1 | val1 | val2 | val3 | val4|
|2 | val1 | val2 | val3 | val4|
|3 | val1 | val2 | val3 | val4|
|4 | val1 | val2 | val3 | val4|
+----+-------+-------+-------+-------+
如何做到这一点?

我将拆分列,并使数组的每个元素都成为一个新列

从pyspark.sql导入函数为F
df=spark.createDataFrame(sc.parallelize(['1','val1,val2,val3,val4'],['2','val1,val2,val3,val4'],['3','val1,val2,val2,val3,val4'],['4','val1,val2,val4'],['col1','col2'])
df2=df.select('col1',F.split('col2',','))。别名('col2'))
#如果您不知道列数:
df_size=df2。选择(F.size('col2')。别名('col2'))
df_max=df_size.agg(F.max('col2'))
nb_columns=df_max.collect()[0][0]
df_result=df2。选择('col1',*[df2['col2'][i]表示范围内的i(nb_列)])
df_result.show()
>>>
+----+-------+-------+-------+-------+
|col1 | col2[0]| col2[1]| col2[2]| col2[3]|
+----+-------+-------+-------+-------+
|1 | val1 | val2 | val3 | val4|
|2 | val1 | val2 | val3 | val4|
|3 | val1 | val2 | val3 | val4|
|4 | val1 | val2 | val3 | val4|
+----+-------+-------+-------+-------+
我在链接副本上发布的可能副本,该副本显示了如何在不使用
udf
collect
的情况下对一般情况执行此操作。是
F.split()
是正确的选择!