如何在 PySpark 中读取格式正确的 JSON 文件?
How to read JSON file with correct format in PySpark?
我有一个 JSON 文件,如下所示:
{"id":{"0":0,"1":1,"2":2,"3":3}, "name":{"0":"name0","1":"name1","2":"name2","3":"name3"}}
当我像这样使用 PySpark 阅读它时:
names = spark.read.json('data/names.json')
我将所有行合并为一行,如下所示:
| id| name|
+--------------+--------------------+
|{0, 1, 2, 3...|{name1, name2, name3...
我如何读取它以便值位于多行?
一个快速的 hack 可以是像这样用 pandas 读取 json:pandas_df = pandas.read_json('data/names.json')
然后将它加载到 spark spark_df = spark.createDataFrame(pandas_df)
中。
更全面的问题分析检查.
这是一个替代的、更原生的 Spark 解决方案。
首先explode_outer
将id
列展开,得到对应的name
值
schema = StructType([
StructField('id', MapType(StringType(), IntegerType())),
StructField('name', MapType(StringType(), StringType()))
])
df = spark.read.json('data/names.json', schema=schema)
df = (df.select(F.explode_outer('id').alias('id_k', 'id_v'), 'name')
.withColumn('name', F.col('name').getItem(F.col('id_v'))))
我有一个 JSON 文件,如下所示:
{"id":{"0":0,"1":1,"2":2,"3":3}, "name":{"0":"name0","1":"name1","2":"name2","3":"name3"}}
当我像这样使用 PySpark 阅读它时:
names = spark.read.json('data/names.json')
我将所有行合并为一行,如下所示:
| id| name|
+--------------+--------------------+
|{0, 1, 2, 3...|{name1, name2, name3...
我如何读取它以便值位于多行?
一个快速的 hack 可以是像这样用 pandas 读取 json:pandas_df = pandas.read_json('data/names.json')
然后将它加载到 spark spark_df = spark.createDataFrame(pandas_df)
中。
更全面的问题分析检查
这是一个替代的、更原生的 Spark 解决方案。
首先explode_outer
将id
列展开,得到对应的name
值
schema = StructType([
StructField('id', MapType(StringType(), IntegerType())),
StructField('name', MapType(StringType(), StringType()))
])
df = spark.read.json('data/names.json', schema=schema)
df = (df.select(F.explode_outer('id').alias('id_k', 'id_v'), 'name')
.withColumn('name', F.col('name').getItem(F.col('id_v'))))