将嵌套 JSON 转换为 DataFrame

问题描述 投票:0回答:1

我尝试使用spark.read.option("multiline", "true").json(file_path)将嵌套JSON转换为DataFrame,但使用此代码它将按字母顺序对列名称进行排序,这不是我所期望的。

当我使用spark.read.option("multiline", "true").json时,数据框将返回此列顺序: 创建时间、创建者、已删除、修改时间、修改者、类型名称、id

我期望的列顺序类似于 .json 文件中的顺序:Id,TypeName,CreatedBy,CreatedAt,ModifiedBy,ModifiedAt,IsDeleted

如何使用多行读取嵌套 json 并获得与 json 文件相同的列顺序。 PS:我不想手动定义架构(我想动态架构)

from pyspark.sql.types import StructType
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.functions import explode
import json

# Initialize SparkSession
spark = SparkSession.builder \
.appName("Read JSON to DataFrame") \
.getOrCreate()

 # Read JSON file into DataFrame to infer schema
 json_df = spark.read.option("multiline", "true").json(FILE_PATH)

 #Get only 'data' component in json file
 exploded_df = json_df.select(explode("data").alias("data"))


 # Select the fields from the exploded DataFrame
 data_df = exploded_df.select("data.*")
 data_df.show()

json_data

json dataframe multiline nested-json
1个回答
0
投票

默认情况下,读取 JSON 文件时,列按字母顺序排序。

spark.read.option(...)
中没有可指定的默认配置来定义有序键。

如果您想保留列顺序,您可以:

  • 使用
    spark.read.schema(schema).json(..)
  • 读取文件时指定架构
  • 使用
    select()
    函数定义列顺序作为下一步
© www.soinside.com 2019 - 2024. All rights reserved.