【发布时间】:2021-02-27 16:53:03
【问题描述】:
我有一个包含具有以下架构的列的数据集:
root
|-- id_: string (nullable = true)
|-- payload: array (nullable = true)
| |-- element: map (containsNull = true)
| | |-- key: string
| | |-- value: string (valueContainsNull = true)
可以看出,第二列payload 包含字典列表作为其条目。我想将此列的类型从array 更改为string,并且按照https://sparkbyexamples.com/pyspark/pyspark-convert-array-column-to-string-column/ 的建议,我尝试了以下代码:
df = df.withColumn("payload", concat_ws(",",col("payload")))
但是,我收到了一个意外错误(见下文)。我认为这是由于每个列条目中包含的列表都存储字典。有谁知道如何解决这个问题?
argument 2 requires (array<string> or string) type, however,`payload` is of array<map<string,string>> type.;
非常感谢,
马里奥安萨斯
在@SRINIVAS 提出解决方案后编辑:我收到以下错误。
Syntax Error.
File "unnamed_3", line 7
df.withColumn("payload", F.expr(concat_ws(',',flatten(transform(payload,x -> transform(map_keys(x),y -> concat(y,x[y])))))))
^
SyntaxError: invalid syntax
【问题讨论】:
-
F.expr("..")将采用 string 类型的参数,正确的一个 -F.expr("concat_ws(',',flatten(transform(payload,x -> transform(map_keys(x),y -> concat(y,x[y])))))") -
嗨@Srinivas,感谢您的评论。我已经尝试了您的建议,但是在绘制架构时,我仍然得到有效载荷的类型为
array,其元素的类型为map。所以它编译了很长时间(我有一个很大的数据框)但似乎什么也没做:(
标签: python apache-spark dictionary pyspark dataset