为了方便调试,需要输出数据到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))