将 PySpark 数据帧转换为 JSON,每列作为键

Posted

技术标签:

【中文标题】将 PySpark 数据帧转换为 JSON,每列作为键【英文标题】:Convert PySpark data frame to JSON with each column as a key 【发布时间】:2019-12-18 09:29:16 【问题描述】:

我正在处理PySpark。我有一个数据框,我需要将其转储为 JSON 文件,但 JSON 文件应具有以下格式,例如 -

"Column 1": [9202, 9202, 9202, ....], "Column 2": ["FEMALE", "No matching concept", "MALE", ....]

所以每列应该有 1 个键,对应的值应该有该列中所有值的列表

我尝试将其转换为 Pandas 数据框,然后转换为 dict,然后将其作为 JSON 转储并成功执行此操作,但由于数据量非常大,我想直接在 PySpark 数据框上执行

【问题讨论】:

【参考方案1】:

一种方法是在写入 JSON 之前将每个列的值收集为数组。试试这个:

column_arrays = [collect_list(c).alias(c) for c in df.columns]
df2 = df.groupBy().agg(*column_arrays)

df2.coalesce(1).write.mode("overwrite").json("/path")

【讨论】:

【参考方案2】:
L = []
for j in range(0, len(df.columns)):
        arr = []
        for i in range(0, df.count()):
                arr.append(df.collect()[i][j])
        L.append(arr)
columns = df.columns

data_dict = dict(zip(columns, L))
print(data_dict)

【讨论】:

以上是关于将 PySpark 数据帧转换为 JSON,每列作为键的主要内容,如果未能解决你的问题,请参考以下文章

如何将 json 转换为 pyspark 数据帧(更快的实现)[重复]

使用 pyspark 将 spark 数据帧转换为嵌套 JSON

将 JSON 从 URL 转换为数据帧(Pyspark 和 Scala)

pySpark - 在插入数据库之前将整个数据框列转换为 JSON 对象

火花流到pyspark json文件中的数据帧

如何将spark数据帧列名和行数据转换为json数据