如何将PySpark DataFrame写入JSON文件且末尾无多余换行符?
PySpark JSON写入消除末尾空行的解决方案
PySpark原生的DataFrame.write.json方法没办法直接实现仅消除末尾空行的需求——它的写入逻辑是给每条JSON记录后添加换行符,包括最后一条,没有参数可以单独控制最后一行的行为。
你可以通过以下两种方式解决:
方案一:写入后修改生成的文件
因为你用了coalesce(1),最终只会生成一个part文件,写完后直接读取这个文件并去掉末尾空行即可:
import os import glob # 定位result目录下的part文件 part_path = glob.glob(os.path.join("result", "part-*.json"))[0] # 读取内容并移除末尾换行 with open(part_path, "r") as f: content = f.read().rstrip("\n") # 覆盖原文件 with open(part_path, "w") as f: f.write(content)
方案二:手动拼接JSON字符串(适合小数据量)
如果数据量不大,可以将DataFrame的每条记录转为JSON字符串,用换行符拼接后直接写入文件,这样就不会产生末尾空行:
# 将DataFrame转为JSON字符串列表 json_lines = output_df.toJSON().collect() # 用换行符拼接所有字符串,无末尾空行 final_content = "\n".join(json_lines) # 写入目标文件 with open("result/final.json", "w") as f: f.write(final_content)
注意:collect()会把全量数据拉到Driver节点,数据量较大时不建议使用,避免内存溢出。
内容的提问来源于stack exchange,提问作者Killian Ronan
相关产品推荐
相关产品推荐

