我尝试使用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 文件时,列按字母顺序排序。
spark.read.option(...)
中没有可指定的默认配置来定义有序键。
如果您想保留列顺序,您可以:
spark.read.schema(schema).json(..)
select()
函数定义列顺序作为下一步