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

时间:2019-12-18 09:29:16

标签: apache-spark pyspark apache-spark-sql databricks

我正在研究PySpark。我有一个数据帧,需要将其作为JSON文件转储,但是JSON文件应具有以下格式,例如-

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

因此,每列应有1个键,并且对应的值应包含该列中所有值的列表

我尝试将其转换为Pandas数据帧,然后转换为dict,然后再将其作为JSON转储,并成功完成了该操作,但是由于数据量很大,我想直接在PySpark数据帧上进行操作< / p>

2 个答案:

答案 0 :(得分:3)

一种方法是在写入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")

答案 1 :(得分:0)

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)