如何使用 UTF-8 编码解析 CSV 文件?

Jyo*_*jan 6 csv unicode apache-spark

我使用 Spark 2.1。

输入 csv 文件包含如下所示的 unicode 字符

unicode-输入-csv

在解析这个 csv 文件时,输出如下所示

unicode-输出-csv

我使用 MS Excel 2010 查看文件。

使用的Java代码是

@Test
public void TestCSV() throws IOException {
    String inputPath = "/user/jpattnaik/1945/unicode.csv";
    String outputPath = "file:\\C:\\Users\\jpattnaik\\ubuntu-bkp\\backup\\bug-fixing\\1945\\output-csv";
    getSparkSession()
      .read()
      .option("inferSchema", "true")
      .option("header", "true")
      .option("encoding", "UTF-8")
      .csv(inputPath)
      .write()
      .option("header", "true")
      .option("encoding", "UTF-8")
      .mode(SaveMode.Overwrite)
      .csv(outputPath);
}
Run Code Online (Sandbox Code Playgroud)

如何获得与输入相同的输出?

小智 9

我能够使用 spark 读取 ISO-8859-1,但是当我将相同的数据存储到 S3/hdfs 并读取它时,格式正在转换为 UTF-8。

前任: é to é

val df = spark.read.format("csv").option("delimiter", ",").option("ESCAPE quote", '"'). option("header",true).option("encoding", "ISO-8859-1").load("s3://bucket/folder")
Run Code Online (Sandbox Code Playgroud)


Jac*_*ski 4

我的猜测是输入文件不在UTF-8,因此您得到的字符不正确。

我的建议是编写一个纯 Java 应用程序(根本没有 Spark),然后看看读取和写入是否通过UTF-8编码给出相同的结果。