[英]Parse CSV file in Scala
我正在嘗試將具有日語字符的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")
關於如何解決此問題的任何指示都將非常有幫助。
以下代碼適用於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();
使用的csvFile內容:
【セキュリティ対策ウェビナー開催中】受講登録でスグに役立つ「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」を進呈!","カグラアカガワヤツキヨク","セキュリティ","受講登録でス"
日語字符串中似乎有換行符。 您可以在讀取文件時嘗試使用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)
注意:根據以下答案,當輸入文件很大時,這種方法會引起一些問題。 如何處理Spark中的多行?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.