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

Apache Spark:将重复多行的DataFrame输出为单行JSON文件

解决Spark DataFrame生成单行JSON文件的问题

你的问题出在collect_metrics函数返回的是原DataFrame新增常量列后的结果,原DataFrame有多少行,输出的JSON就会有多少重复的行。要生成单行JSON,得从两个地方调整:

1. 生成单行统计结果的DataFrame

不用给原DataFrame的每一行都追加统计列,直接创建只包含统计值的单行DataFrame即可:

def collect_metrics(df) -> pyspark.sql.DataFrame:
    neg_value = df.where(df.count < 0).count()
    # 直接生成仅含统计结果的单行DataFrame
    return spark.createDataFrame([(neg_value,)], ["loader_neg_values"])

2. 配置JSON写入参数实现单行格式

Spark默认输出JSON Lines格式(每行一个JSON对象),要生成单行的JSON数组,需要开启multiLine选项,同时用coalesce(1)确保只生成一个文件:

def main(args):
    df_metrics = collect_metrics(df)
    df_metrics.coalesce(1) \
              .write \
              .option("multiLine", "true") \
              .json(args.metrics)

关键说明

  • coalesce(1):将数据合并到单个分区,输出单个JSON文件(你的场景是单行数据,完全适用)
  • option("multiLine", "true"):让Spark把整个DataFrame输出为单行的JSON数组,而非每行一个独立对象
  • Spark默认写入JSON时不做压缩,无需额外配置压缩相关参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:50:22