如何使用逗号分隔值拆分列并存储在 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]|
+----+------------------------+
如何做到这一点?
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 除了第一个之外的所有项目。
我有一个 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]|
+----+------------------------+
如何做到这一点?
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 除了第一个之外的所有项目。