You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PySpark读取无逗号分隔的多行JSON文件?

用PySpark处理无逗号分隔的多行JSON文件

普通Python加载大文件时因内存不足报错是常见问题,PySpark的分布式处理特性刚好适配这种场景,以下是针对无逗号分隔多行JSON的具体解决步骤:

1. 初始化SparkSession

这是PySpark所有操作的基础入口:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("ReadMultiLineJSON") \
    .getOrCreate()

2. 读取目标JSON文件

无逗号分隔的多行JSON本质是每行一个独立JSON对象(即NDJSON格式),PySpark原生支持这种格式,只需指定对应参数:

  • multiLine=False:默认值,代表按行解析独立JSON对象,完美匹配你的文件格式
  • inferSchema=True:让Spark自动推断字段类型,若你提前知晓数据结构,手动指定Schema能进一步提升效率

代码示例:

# 替换为你的文件路径(本地路径或分布式存储路径均可)
df = spark.read.json("/path/to/your/14GB-file.json", multiLine=False, inferSchema=True)

# 验证读取结果
df.printSchema()  # 查看数据结构
df.show(5)        # 展示前5行数据

如果你的文件是单个大JSON数组但元素间无逗号(这种情况较少见),则需设置multiLine=True,同时可能需要先通过RDD预处理修复格式,但绝大多数无逗号分隔的多行JSON场景用上面的方法即可直接解决。

3. 后续数据处理(可选)

读取完成后,可基于DataFrame进行任意操作,比如过滤、聚合、导出为更高效的格式:

# 示例:过滤数据并导出为Parquet格式(比JSON占用空间更小,读写更快)
df.filter(df["target_column"] > 100).write.mode("overwrite").parquet("/path/to/output.parquet")

为什么PySpark不会内存溢出?

PySpark采用分块处理机制,不会将14GB文件一次性加载到内存,而是将文件拆分为多个小分区(默认每个分区约128MB),逐个分区处理,因此16GB内存完全能支撑整个流程。

内容的提问来源于stack exchange,提问作者Abdul Haseeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:45:07