将 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)