Я думаю, вы должны указать правильную кодировку для немецких символов. или редактор, который вы открываете, искажает символы своей собственной кодировкой (возможно, ошибка редактора). Обычно и utf-8, и iso-8859 выполняют кодирование одинаково. После общения с @ GP I я также протестировал код ниже в формате utf-8. out out был тем же, используя intellijeditor. Я открыл полученный текстовый файл.
ОБНОВЛЕНИЕ / Заключение: нижеприведенный способ с использованием iso или utf-8 должен работать аналогично , Это может быть текстовый редактор OPS, с помощью которого он открывает, может быть причиной этой проблемы. Там, где проблема не является проблемой.
df.coalesce(1).
write.
mode(SaveMode.Overwrite).
format("csv").
option("header", true).
.option("encoding", "ISO-8859-1")
partitionBy("Region").
save("path")
Взятые образцы данных немецких символов и снова сохранены как csv в файловой системе. Вот пример и код.
package examples
import org.apache.log4j.Level
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}
object GermanCSV extends App {
val logger = org.apache.log4j.Logger.getLogger("org")
logger.setLevel(Level.WARN)
val spark = SparkSession.builder().appName(this.getClass.getName).master("local").getOrCreate()
import spark.implicits._
val mycsvdata =
"""
|rank,freq,Infinitiv,Unreg,Trans,"Präsens_ich","Präsens_du","Präsens_er, sie, es","Präteritum_ich","Partizip II","Konjunktiv II_ich","Imperativ Singular","Imperativ Plural",Hilfsverb
|3,3796784,sein,"","",bin,bist,ist,war,gewesen,"wäre",sei,seid,sein
|8,1618550,haben,"","",habe,hast,hat,hatte,gehabt,"hätte",habe,habt,haben
|10,1379496,einen,"","",eine,einst,eint,einte,geeint,einte,eine,eint,haben
|12,948246,werden,"","",werde,wirst,wird,wurde,geworden,"würde",werde,werdet,sein
""".stripMargin.lines.toList.toDS
val csvdf: DataFrame = spark.read.option("header", true)
.option("header", true)
.csv(mycsvdata)
println("orginal data")
csvdf.show(false)
println("Writing in to a csv file with ISO-8859-1 encoding way , handling german characters")
csvdf.coalesce(1).
write.
mode(SaveMode.Overwrite).
format("csv").
option("header", true)
.option("encoding", "ISO-8859-1")
.save("data/iso8859-1")
}
Результат:
[2020-04-22 10:26:36,598] WARN Unable to load native-hadoop library for your platform... using builtin-java classes where applicable (org.apache.hadoop.util.NativeCodeLoader:62)
orginal data
+----+-------+---------+-----+-----+-----------+----------+-------------------+--------------+-----------+-----------------+------------------+----------------+---------+
|rank|freq |Infinitiv|Unreg|Trans|Präsens_ich|Präsens_du|Präsens_er, sie, es|Präteritum_ich|Partizip II|Konjunktiv II_ich|Imperativ Singular|Imperativ Plural|Hilfsverb|
+----+-------+---------+-----+-----+-----------+----------+-------------------+--------------+-----------+-----------------+------------------+----------------+---------+
|3 |3796784|sein |null |null |bin |bist |ist |war |gewesen |wäre |sei |seid |sein |
|8 |1618550|haben |null |null |habe |hast |hat |hatte |gehabt |hätte |habe |habt |haben |
|10 |1379496|einen |null |null |eine |einst |eint |einte |geeint |einte |eine |eint |haben |
|12 |948246 |werden |null |null |werde |wirst |wird |wurde |geworden |würde |werde |werdet |sein |
+----+-------+---------+-----+-----+-----------+----------+-------------------+--------------+-----------+-----------------+------------------+----------------+---------+
Writing in to a csv file with ISO-8859-1 encoding way , handling german characters
Сохранение CSV согласно коду data/iso8859-1
без изменения данных ... как показано ниже:
rank,freq,Infinitiv,Unreg,Trans,Präsens_ich,Präsens_du,"Präsens_er, sie, es",Präteritum_ich,Partizip II,Konjunktiv II_ich,Imperativ Singular,Imperativ Plural,Hilfsverb
3,3796784,sein,"","",bin,bist,ist,war,gewesen,wäre,sei,seid,sein
8,1618550,haben,"","",habe,hast,hat,hatte,gehabt,hätte,habe,habt,haben
10,1379496,einen,"","",eine,einst,eint,einte,geeint,einte,eine,eint,haben
12,948246,werden,"","",werde,wirst,wird,wurde,geworden,würde,werde,werdet,sein