Apache Spark 读取 UTF-16 CSV 文件

Posted

技术标签:

【中文标题】Apache Spark 读取 UTF-16 CSV 文件【英文标题】:Apache Spark reading UTF-16 CSV file 【发布时间】:2018-09-12 15:06:25 【问题描述】:

我正在尝试读取以 UTF-16 编码的 CSV 文件。

val test = spark.read
.format("com.databricks.spark.csv")
.option("header", "true")
.option("inferSchema", "true")
.option("delimiter",";")
.option("dateFormat", "yyyy-MM-dd HH:mm:ss.SSS")
.option("encoding", "UTF-16")
.option("charset", "ISO-8859-1")
.load("...")

结果我得到了额外的行:

Spark 有可能只能使用 UTF-8 编码吗?还是有其他方法可以将 UTF-16 CSV 读入数据帧?

【问题讨论】:

使用 iconv 重新编码输入文件怎么样? 如果您忽略 charset 选项会发生什么? @StStojanovic 请分享一些可用于重现它的示例文件内容... @datahack 你有没有想过这个问题? 有人知道这个吗? 【参考方案1】:

我在尝试读取具有 UTF-16 格式的 csv 文件时也遇到了类似的问题。

我正在使用 mac,但我不知道我正在阅读的 csv 文件的编码是什么。最初我在没有提供任何编码选项的情况下读取文件,它给了我两个“?”在列名前面。

因此尝试在我的 mac 中使用以下命令找出我正在读取的 csv 文件的编码。

file -I yourFile

这个命令的输出显示文件的编码是charset=utf-16le

现在我通过提供此选项来读取文件,它工作正常。

val df = spark.read.
            format("csv").
            option("quote", "\"").
            option("escape", "\\").
            option("multiLine", "true").
            option("inferSchema", "true").
            option("header","true").
            option("encoding", "UTF-16").
            load(sourceS3path)

如果只是读取 UTF-16 文件,则无需提供 charset 选项。

【讨论】:

以上是关于Apache Spark 读取 UTF-16 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章

Spark---读取csvjson文件

从Apache Kafka到Apache Spark安全地读取数据

java.lang.IllegalArgumentException:实例化'org.apache.spark.sql.hive.HiveSessionState'时出错:使用spark会话读取csv

我可以使用 `rownum` 来优化 apache spark 读取 oracle 表吗? [复制]

通过 Apache Spark Streaming 从 RabbitMq 读取消息

如何在 apache spark 中读取最新的分区