pyspark保存为csv

为了方便调试,需要输出数据到csv,但是确遇到excel打开乱码问题,今天就解决这个问题。

保存CSV

# -*- coding: utf-8 -*-
from pyspark.sql import SparkSession
# 创建SparkSession
spark = SparkSession.builder\
    .master("local[8]")\
    .appName("cal person")\
    .getOrCreate()

# 读取csv文件
df_spark = spark.read.csv("./test.csv", header=True)
# 保存csv文件
df_spark.repartition(1).write.csv("./res", encoding="utf-8", header=True)

repartition(1)是将所有分区文件合并成一个,不加这个选项会生成很多个文件。

解决乱码

解决思路很简单,就是在csv文件开头添加UTF BOM就行了。
根据UTF-8编码的规定,文件开头的字节流是EF BB BF。

def add_bom(filepath):
    with open(filepath, "rb") as f:
        data = f.read()
    data_list = list(data)
    data_list = [239, 187, 191] + data_list
    with open("./res.csv", "wb") as f:
        f.write(bytes(data_list))

参考链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。