使用pyspark将.csv文件转换为多行json文件时遇到问题。
我有一个通过spark rdd读取的csv文件,我需要使用pyspark将其转换为多行json。
这是我的代码:
import json
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("jsonconversion").getOrCreate()
df = spark.read.format("csv").option("header","True").load(csv_file)
df.show()
df_json = df.toJSON()
for row in df_json.collect():
line = json.loads(row)
result =[]
for key,value in list(line.items()):
if key == 'FieldName':
FieldName =line['FieldName']
del line['FieldName']
result.append({FieldName:line})
res =result
with open("D:/tasklist/jsaonoutput.json",'a+')as f:
f.write(json.dumps(res, indent=4, separators=(',',':')))
我需要以下格式的输出。
{
"Name":{
"DataType":"String",
"Length":4,
"Required":"Y",
"Output":"Y",
"Address": "N",
"Phone Number":"N",
"DoorNumber":"N/A"
"Street":"N",
"Locality":"N/A",
"State":"N/A"
}
}
我的输入CSV文件如下所示:
我是Pyspark的新手,将此代码修改为有效代码的任何线索将不胜感激。
谢谢。
答案 0 :(得分:0)
尝试以下代码。它首先从spark DF创建pandas数据帧(除非您关心使用spark df做其他事情,否则可以将csv文件直接加载到pandas中)。在pandas df中,它基于FieldName列创建组,然后写入json.dumps负责格式化的文件。
import json
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("jsonconversion").getOrCreate()
df = spark.read.format("csv").option("header","True").load(csv_file)
df.show()
df_pandas_grped = df.toPandas().groupby('FieldName')
final_dict = {}
for key, grp in df_pandas_grped:
final_dict[str(key)] = grp.to_dict('records')
with open("D:/tasklist/jsaonoutput.json",'w')as f:
f.write(json.dumps(final_dict,indent=4))