Запись Dataframe с кириллическим символом в HDFS меняет кодировку - PullRequest
0 голосов
/ 05 апреля 2019

Мне нужно прочитать 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])
...