如何将多个特定结构的JSON文件读取为PySpark DataFrame
用PySpark读取多个Split格式的JSON文件生成DataFrame
你的JSON文件采用了split格式(包含columns列名字段和data行数据字段),PySpark没有直接对应orient='split'的参数,需要手动处理结构来生成目标DataFrame,以下是具体实现步骤:
实现代码
1. 初始化SparkSession
from pyspark.sql import SparkSession from pyspark.sql.functions import explode, col # 初始化SparkSession(如果未创建) spark = SparkSession.builder \ .appName("ReadSplitStyleJSON") \ .getOrCreate()
2. 读取多个JSON文件
使用通配符匹配目录下的所有目标JSON文件(支持本地路径或HDFS路径):
# 读取目录下所有JSON文件,替换为你的实际路径 raw_df = spark.read.json("/path/to/your/json/files/*.json")
3. 转换为目标DataFrame
先将data字段中的数组展开为单行数据,再根据columns字段映射列名:
# 展开data中的每一行数据 exploded_df = raw_df.select("columns", explode("data").alias("row_data")) # 获取列名列表(假设所有JSON文件的columns一致) column_names = exploded_df.select("columns").first()[0] # 将row_data中的元素映射到对应的列名 final_df = exploded_df.select( *[col("row_data")[idx].alias(col_name) for idx, col_name in enumerate(column_names)] )
4. 验证结果
final_df.show()
输出示例:
+-------+-------+-------+ |Column1|Column2|Column3| +-------+-------+-------+ | 1| 2| 3| | 4| 5| 6| | 7| 8| 9| | 10| 11| 12| +-------+-------+-------+
注意事项
- 如果不同JSON文件的
columns字段不一致,需要先检查列名一致性,或动态处理列映射逻辑(比如取所有文件列名的并集,缺失值补null)。 - 若文件数量极大,Spark的分布式读取会比Pandas更高效,无需手动合并多个文件。
内容的提问来源于stack exchange,提问作者Lalit Chahal
相关产品推荐
相关产品推荐

