如何在 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_outerid列展开,得到对应的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'))))