【发布时间】:2020-09-23 16:14:00
【问题描述】:
我有一个 CSV 文件,其中包含 JSON 对象以及其他数据,如字符串、整数。 如果我尝试以 CSV 格式读取文件,则 JSON 对象会在其他列中重叠。
Column1, Column2, Column3, Column4, Column5
100,ABC,{"abc": [{"xyz": 0, "mno": "h"}, {"apple": 0, "hello": 1, "temp": "cnot"}]},foo, pine
101,XYZ,{"xyz": [{"abc": 0, "mno": "h"}, {"apple": 0, "hello": 1, "temp": "cnot"}]},bar, apple
我得到的输出是:
Column1 | Column2 | Column3 | Column4 | Column5
100 | ABC | {"abc": [{"xyz": 0, "mno": "h"} | {"apple": 0, "hello": 1 | "temp": "cnot"}]}
101 | XYZ | {"xyz": [{"abc": 0, "mno": "h"} | {"xyz": [{"abc": 0, "mno": "h"} | "temp": "cnot"}]}
Test_File.py
from pyspark.sql import SQLContext
from pyspark.sql.types import *
# Initializing SparkSession and setting up the file source
filepath = "s3a://file.csv"
df = spark.read.format("csv").options(header="true", delimiter = ',', inferschema='true').load(filepath)
df.show(5)
还尝试通过将文件作为文本读取来处理此问题,如 this approach 中所述
'100,ABC,"{\'abc\':["{\'xyz\':0,\'mno\':\'h\'}","{\'apple\':0,\'hello\':1,\'temp\':\'cnot\’}”]}”, foo, pine'
'101,XYZ,"{\'xyz\':["{\'abc\':0,\'mno\':\'h\'}","{\'apple\':0,\'hello\':1,\'temp\':\'cnot\’}”]}”, bar, apple'
但是我不想创建一个新文件,而是将此引用的字符串加载为 PySpark DataFrame 以在它们上运行 SQL 查询,创建一个 DataFrame 我需要再次拆分它以将每一列分配给 PySpark,从而导致拆分JSON 对象。
【问题讨论】:
-
如果解决了您的问题,请查看答案和mark as answer。
标签: python json csv pyspark apache-spark-sql