Apache Spark 读取 UTF-16 编码的 CSV 文件

8
我正在尝试读取一个以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("...")

因此,我得到了额外的行:

enter image description here

Spark是否只能使用UTF-8编码?或者有其他方法将UTF-16 CSV读入数据框架中吗?


使用iconv重新编码输入文件怎么样? - Victor Gubin
3
请分享一些样本文件的内容,以便重现它。 - ernest_k
@StStojanovic 我的意思是,拿到你从BD导出的文件后,只需在命令行中重新编码,例如 iconv -f UTF-16 -t UTF-8 com.databricks.spark.csv >> com.databricks.spark.csv.utf8.csv。UTF-8支持所有可能的UNICODE字符,包括1-4个字节。 - Victor Gubin
1
@Datahack 你最后搞定了吗? - shuttj
1
有人解决了这个问题吗? - Samhash
显示剩余4条评论
1个回答

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文件,则不需要提供字符集选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接