簡體   English   中英

在Scala中解析CSV文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM