我有一个数据集,其中包含具有以下架构的列:
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
1条答案
按热度按时间iyr7buue1#
将内部Map键、值数据转换为字符串数组,然后将数据展平并将结果传递给
concat_ws
功能。检查以下代码。
spark版本-
2.4