我正在尝试将具有日语字符的CSV文件加载到scala的数据框中。当我读取列值"セキュリティ対策ウェビナー開催中】受講登録でスグに役立つ「e-Book」を進呈!"
时,该值仅应放在一列中,它将在"」"
处断开字符串(将此视为新行)并创建两个记录。
我也将“ charset”属性设置为UTF-16,引用字符为“ \”“,它仍然显示比文件更多的记录。
val df = spark.read.option("sep", "\t").option("header", "true").option("charset","UTF-16").option("inferSchema", "true").csv("file.txt")
任何有关如何解决此问题的指针将非常有帮助。
答案 0 :(得分:1)
以下代码应适用于UTF-16。我无法在Notepad ++中设置编码为UTF-16的csv文件,因此我已经使用UTF-8对其进行了测试。请确保已设置输入文件编码为UTF-16。
代码段:
val br = new BufferedReader(
new InputStreamReader(
new FileInputStream("C:/Users/../Desktop/csvFile.csv"), "UTF-16"));
for(line <- br.readLine()){
print(line)
}
br.close();
csv使用的文件内容:
【セキュリティ対策ウェビナー開催中】受講登録でスグに役立つ「e-Book」を進呈!,January, セキュリティ, 開催, 1000.00
更新:
如果要使用spark加载,则可以按以下方式加载csv文件。
spark.read
.format("com.databricks.spark.csv")
.option("charset", "UTF-16")
.option("header", "false")
.option("escape", "\\")
.option("delimiter", ",")
.option("inferSchema", "false")
.load(fromPath)
上述代码的示例输入文件:
"102","03","セキュリティ対策ウェビナー開催中】受講登録でスグに役立つ「e-Book」を進呈!","カグラアカガワヤツキヨク","セキュリティ","受講登録でス"
答案 1 :(得分:1)
日语字符串中似乎有换行符。您可以在读取文件时尝试使用multiLine选项吗?
var data = spark.read.format("csv")
.option("header","true")
.option("delimiter", "\n")
.option("charset", "utf-16")
.option("inferSchema", "true")
.option("multiLine", true)
.load(filePath)
注意:根据以下答案,当输入文件很大时,这种方法会引起一些问题。 How to handle multi line rows in spark?