You need to enable JavaScript to run this app. 如何解决PySpark DataFrame读取含非英文字符CSV文件的编码乱码问题
优惠活动
大模型
产品
解决方案
定价
更多

如何解决PySpark DataFrame读取含非英文字符CSV文件的编码乱码问题

解决步骤

1. 调整读取参数解决核心问题

你遇到的乱码大概率是两个参数配置错误导致的:

  • 波斯语CSV如果是Windows环境下生成/编辑,默认编码通常是CP1256(Windows-1256)而非UTF-8
  • 你的文件是制表符分隔,Spark CSV默认分隔符为逗号,字段拆分错误会导致字符拼接乱码
  • 部分Spark版本仅识别charset参数作为编码配置,encoding参数不生效

修改后的读取代码如下:

df = spark.read.option("inferSchema","true")\
    .option("charset", "CP1256")\ # 如果确认文件是UTF-8编码就替换为utf-8,也可尝试ISO-8859-6
    .option("sep", "\t")\ # 强制指定制表符为分隔符
    .csv("1399-12-27.csv")\
    .toDF( 'simbol',
    'name',
     'count',
     'volume',
     'Value',
     'lastday',
     'first',
     'lastTransactionamount',
     'lastTransactionChange',
     'lastTransactionPercentage',
     'finalpriceamount',
     'finalpriceChange',
     'finalpricePercentage',
     'min',
     'max',
     'date')

2. 排除显示环境问题

如果修改参数后show()仍显示乱码,属于运行环境的显示编码不支持波斯语,不是读取错误:

  • Windows系统可先在终端执行chcp 65001切换为UTF-8编码后再运行代码
  • 可直接提取字段验证读取结果:print(df.first()['name']),或把单条字段内容存为本地文本文件打开确认

3. 兜底转码方案

如果以上方法都无效,可先把文件转码为UTF-8后再读取:

import pandas as pd
# 用对应编码读取本地文件
df_pd = pd.read_csv("1399-12-27.csv", encoding="CP1256", sep="\t", header=None)
# 导出为UTF-8编码的新文件
df_pd.to_csv("1399-12-27_utf8.csv", encoding="utf-8", index=False, header=False)
# 再用Spark读取新文件即可

内容的提问来源于stack exchange,提问作者Ali Hosein pour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 11:45:02