【问题标题】:How to split a column with comma separated values in PySpark's Dataframe?如何在 PySpark Dataframe 中使用逗号分隔值拆分列?
【发布时间】:2019-01-11 07:09:33
【问题描述】:

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

+----+----------------------+
|col1|                  col2|
+----+----------------------+
|   1|val1, val2, val3, val4|
|   2|val1, val2, val3, val4|
|   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|
+----+-------+-------+-------+-------+

如何做到这一点?

【问题讨论】:

标签: dataframe pyspark


【解决方案1】:

我会拆分列并将数组的每个元素都设为新列。

from pyspark.sql import functions as F

df = spark.createDataFrame(sc.parallelize([['1', 'val1, val2, val3, val4'], ['2', 'val1, val2, val3, val4'], ['3', 'val1, val2, val3, val4'], ['4', 'val1, val2, val3, val4']]), ["col1", "col2"])

df2 = df.select('col1', F.split('col2', ', ').alias('col2'))

# If you don't know the number of columns:
df_sizes = df2.select(F.size('col2').alias('col2'))
df_max = df_sizes.agg(F.max('col2'))
nb_columns = df_max.collect()[0][0]

df_result = df2.select('col1', *[df2['col2'][i] for i in range(nb_columns)])
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|
+----+-------+-------+-------+-------+

【讨论】:

  • 是的! F.split() 是要走的路!
  • 有什么办法可以改变新生成的列名。例如level1, level2 等.. 而不是 col1, col2
  • 我现在使用这个:df_res = df_result.toDF(*(c.replace('col2', 'level') for c in df_result.columns))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 2012-05-21
  • 2018-12-25
相关资源
最近更新 更多