首页 > 解决方案 > PySpark - 将字符串转换为数组

问题描述

我的数据框中有一列是一个字符串,其值类似于["value_a", "value_b"].

将此列转换为 Array 并展开它的最佳方法是什么?现在,我正在做类似的事情:

explode(split(col("value"), ",")).alias("value")

但是我得到了类似["awesome"or "John"or"Maria]"的字符串,并且预期的输出应该是awesome, John, Maria(每行一个项目,这就是我使用爆炸的原因)。

重现的示例代码:

sample_input = [
  {"id":1,"value":"[\"johnny\", \"maria\"]"},
  {"id":2,"value":"[\"awesome\", \"George\"]"}
]

df = spark.createDataFrame(sample_input)

df.select(col("id"), explode(split(col("value"), ",")).alias("value")).show(n=10)

上面代码生成的输出:

+---+----------+
| id|     value|
+---+----------+
|  1| ["johnny"|
|  1|  "maria"]|
|  2|["awesome"|
|  2| "George"]|
+---+----------+

预期应该是:

+---+----------+
| id|    value|
+---+----------+
|  1| johnny |
|  1| maria  |
|  2| awesome|
|  2| George|
+---+----------+

标签: apache-sparkpyspark

解决方案


为我工作。

sample_input = [
  {"id":1,"value":["johnny", "maria"]},
  {"id":2,"value":["awesome", "George"]}
]

df = spark.createDataFrame(sample_input)

df.select(col("id"), explode(col("value")).alias("value")).show(n=10)
+---+-------+
| id|  value|
+---+-------+
|  1| johnny|
|  1|  maria|
|  2|awesome|
|  2| George|
+---+-------+

推荐阅读