如何在 Pyspark 中将 ArrayType 的列转换为 Dictionary

Posted

技术标签:

【中文标题】如何在 Pyspark 中将 ArrayType 的列转换为 Dictionary【英文标题】:How to convert column of ArrayType to Dictionary in Pyspark 【发布时间】:2020-07-14 13:05:59 【问题描述】:

我正在一个数据帧上执行 collect_list,它产生了所需的column(TASourceId),如下所示:

["TASourceId": "Source1", "flag": "true", "TASourceId": "Source2", "flag": "true"]

查询:

SELECT col1, col2,col3, collect_list(struct(TASourceId, flag)) as TASourceId
FROM table
GROUP BY 1,2,3

是否可以获得字典对象的字典作为列的输出,如下所示?

"col1":"TASourceId": "Source1", "flag": "true", "col2":"TASourceId": "Source2", "flag": "true"

我正在尝试使用spark UDF 来获取此信息,但出现以下错误:

类 dict 错误的预期参数为零。

【问题讨论】:

请使用您尝试过的代码添加示例输入和示例。最好是表格格式的 src 行。 【参考方案1】:

我已将样本作为您的数组并将其转换为字典。

a=["TASourceId": "Source1", "flag": "true", "TASourceId": "Source2", "flag": "true"]
s=
for i in range(0,len(a)):
    s["col"+str(i)]=a[i]
print(s)

【讨论】:

以上是关于如何在 Pyspark 中将 ArrayType 的列转换为 Dictionary的主要内容,如果未能解决你的问题,请参考以下文章

如何在pyspark中将字符串值转换为arrayType

如何在 Pyspark 中将 ArrayType 的列转换为 Dictionary

在 PySpark 中将 ArrayType(StringType()) 的列转换为 ArrayType(DateType())

在 PySpark 中将 StringType 转换为 ArrayType

pySpark:如何在数据框中的 arrayType 列中获取 structType 中的所有元素名称?

Pyspark - 循环通过 structType 和 ArrayType 在 structfield 中进行类型转换