如何使用Pyspark将.CSV文件转换为.Json文件?

时间:2018-12-08 12:51:04

标签: python-3.x eclipse pyspark rdd pydev

使用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文件如下所示:

enter image description here

我是Pyspark的新手,将此代码修改为有效代码的任何线索将不胜感激。

谢谢。

1 个答案:

答案 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))