如何使用逗号分隔值拆分列并存储在 PySpark Dataframe 中的数组中?如下所示

How to split a column with comma separated values and store in array in PySpark's Dataframe? As given below

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

+------------------------+
|col1                    |
+------------------------+
|1,val1, val4            |
|2,val1                  |
|3,val1, val2, val3      |
|4,val1, val2, val3, val4|
+------------------------+

现在我希望将其分成两列,如下所示

+----+------------------------+
|col1|col2                    |
+----+------------------------+
|   1|[val1, val4]            |
|   2|[val1]                  |
|   3|[val1, val2, val3]      |
|   4|[val1, val2, val3, val4]|
+----+------------------------+

如何做到这一点?

您可以使用 slice and split 来实现:

from pyspark.sql.functions import col, split, slice

array_len = 4
df.withColumn("ar", split(col("col1"), ",")) \
  .select(
     col("ar")[0].alias("col1"), 
     slice(col("ar"), 2, array_len).alias("col2")
  )

# +----+---------------------------+
# |col1|col2                       |
# +----+---------------------------+
# |1   |[val1,  val4]              |
# |2   |[val1]                     |
# |3   |[val1,  val2,  val3]       |
# |4   |[val1,  val2,  val3,  val4]|
# +----+---------------------------+

首先我们将数组拆分并存储到 ar,接下来我们使用 select 来检索数组的第一项 col("ar")[0] 和数组的其余部分 slice(col("ar"), 2, array_len) 这将 return 除了第一个之外的所有项目。