Мне нужно прочитать 1 файл XML из HDFS с кириллическими символами и проанализировать этот файл с помощью spark (scala), выполнить некоторое преобразование и записать его обратно в HDFS.Когда я пишу файл, я не вижу исходный кириллический символ, его заменяют на ???.Я подозреваю, что причина в том, что после записи его в HDFS кодировка конвертируется в charset = us-ascii.Я использую spark 1.6 и scala 2.10
Я пытался установить кодировку программы по умолчанию, используя несколько подходов: -
1) System.setProperty("file.encoding", "UTF-8")
2) sqlContext.read.format("com.databricks.spark.xml")
.option("rowTag", "resourceListing")
.option("charset","UTF8")
.option("encoding","UTF8")
.load(input_path)
.write.format("com.databricks.spark.csv")
.option("delimiter", "\t")
.option("encoding", "UTF8")
.option("charset","UTF8")
.mode("overwrite")
.save("output_path")
3) from maven -
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
4) from spark-submit -
--driver-java-options -Dfile.encoding=utf-8
--conf spark.driver.extraJavaOptions=-Dfile.encoding=utf-8
Входной файл выглядит так: -
<resourceListing>
<resource language="de" title="Mailand"></resource>
<resource language="en" title="Milan"></resource>
<resource language="pt" title="Milão" ></resource>
<resource language="mi" title="米兰"></resource>
<resource language="de" title="Köln"></resource>
</resourceListing>
Фактический результат: -
WrappedArray([null,de,Mailand], [null,en,Milan], [null,pt,Mil??o],
[null,mi,??????], [null,de,K?ln])
Ожидаемый результат: -
WrappedArray([null,de,Mailand], [null,en,Milan], [null,pt,Milão],
[null,mi,米兰], [null,de,Köln])