Spark读取CSV与ISO-8859-1编码文本文件的行为差异排查
编码问题分析与解决
问题根源
你遇到的问题核心在于Spark的textFile方法不会继承DataFrameReader实例中设置的encoding参数:
csv是DataFrameReader的原生方法,会正确读取并应用你通过.option("encoding", "ISO-8859-1")设置的编码配置;- 而
textFile虽然可以通过DataFrameReader调用,但底层实际是调用SparkSession的textFile方法,不会继承当前DataFrameReader实例的配置项,导致编码设置失效,读取时默认使用UTF-8编码解析ISO-8859-1格式的文件,最终出现乱码。
修复方案
有两种简单有效的修复方式:
方式一:使用DataFrameReader的text方法替代textFile
text是DataFrameReader的原生方法,会正确应用已设置的编码,返回结构为value: String列的DataFrame,和textFile输出结构一致:
val text: DataFrame = reader.text(inFile) text.show()
方式二:调用textFile时显式指定编码
直接在调用textFile前单独设置编码,确保参数被正确应用:
val text: Dataset[String] = spark.read.option("encoding", "ISO-8859-1").textFile(inFile)
修改后运行代码,文本文件的读取结果会和CSV一样正常显示José, André。
内容的提问来源于stack exchange,提问作者Heitor Barbieri
相关产品推荐
相关产品推荐

