apache-spark - 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|
+---+----------+
解决方案
为我工作。
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|
+---+-------+
推荐阅读
- jenkins - 在 Jenkins 中对 Node 的每个执行器执行命令
- mongodb - mongo查找不使用某人索引的数据
- excel - 非常混乱的数据:如何清理所有不一致的水平数据?[VBA]
- laravel - 如何通过刀片文件中的url传递静态值?
- logging - 在 uWSGI 中禁用 health_check 的日志
- javascript - How to understand a React file
- forms - Silverstripe 用户表单模块更新
- javascript - 斐波那契数列从 JavaScript 到 Python 的递归记忆
- html - 谷歌函数找不到静态文件 css / js
- python - 从excel读取数据时在数据框中获取不正确的值