我正在研究PySpark
。我有一个数据帧,需要将其作为JSON
文件转储,但是JSON
文件应具有以下格式,例如-
{"Column 1": [9202, 9202, 9202, ....], "Column 2": ["FEMALE", "No matching concept", "MALE", ....]}
因此,每列应有1个键,并且对应的值应包含该列中所有值的列表
我尝试将其转换为Pandas数据帧,然后转换为dict,然后再将其作为JSON转储,并成功完成了该操作,但是由于数据量很大,我想直接在PySpark数据帧上进行操作< / p>
答案 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)