【发布时间】:2018-08-06 18:40:42
【问题描述】:
尝试将 StringType 转换为 JSON 的 ArrayType 以生成 CSV 格式的数据帧。
在Spark2 上使用pyspark
我正在处理的 CSV 文件;如下-
date,attribute2,count,attribute3
2017-09-03,'attribute1_value1',2,'[{"key":"value","key2":2},{"key":"value","key2":2},{"key":"value","key2":2}]'
2017-09-04,'attribute1_value2',2,'[{"key":"value","key2":20},{"key":"value","key2":25},{"key":"value","key2":27}]'
如上所示,它在文字字符串中包含一个属性"attribute3",从技术上讲,它是一个精确长度为2的字典(JSON)列表。
(这是函数 distinct 的输出)
来自printSchema()的片段
attribute3: string (nullable = true)
我正在尝试将"attribute3" 转换为ArrayType,如下所示
temp = dataframe.withColumn(
"attribute3_modified",
dataframe["attribute3"].cast(ArrayType())
)
Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: __init__() takes at least 2 arguments (1 given)
确实,ArrayType 期望数据类型作为参数。我试过"json",但没有用。
所需的输出 -
最后,我需要将attribute3 转换为ArrayType() 或简单的Python 列表。 (我试图避免使用eval)
如何将其转换为ArrayType,以便将其视为 JSON 列表?
我在这里遗漏了什么吗?
(documentation,并没有直接解决这个问题)
【问题讨论】:
-
你想要的输出是什么?请阅读how to create good reproducible apache spark dataframe examples 并尝试为我们提供一些示例输入/输出。
-
@pault 更新了问题。我只是想将字符串转换为
ArrayType(JSON?) -
JSON 不是
pyspark中数组的有效数据类型。如果你能提供一个你希望最终输出看起来像什么的例子,那将会很有帮助。可能有不同的方法来获得尚未考虑的输出。 -
是的,JSON 不是有效的数据类型。我想将它转换为简单的 Python 列表,我可以在其中执行一些操作(例如 - 在 JSON 中求和/连接值,或将其与其他数据框连接并检查属性的相等性)我试图避免使用 @987654341 @
标签: python pyspark pyspark-sql