2016-09-12 104 views
2

我試圖讀取一個使用反斜線來轉義分隔符而不是使用引號的CSV文件。我已經試過構建沒有qoutes和轉義字符的DataFrameReader,但它不起作用。看起來「逃生」選項只能用於轉義引號字符。除了創建自定義輸入格式之外,還有其他解決方法嗎?Spark 2.0 Scala - 使用轉義分隔符讀取csv文件

下面是我使用現在的選項:

spark.read.options(Map(
    "sep" -> ",", 
    "encoding" -> "utf-8", 
    "quote" -> "", 
    "escape" -> "\\", 
    "mode" -> "PERMISSIVE", 
    "nullValue" -> "" 

例如,讓我們說我們有下面的示例數據:

架構:產品名稱,城市

Joe Bloggs,Dublin\,Ireland 
    Joseph Smith,Salt Lake City\,\ 
    Utah 

這應該返回2條記錄:

Name   |  City 
-----------------|--------------- 
Joe Bloggs  | Dublin,Ireland 
Joseph Smith  | Salt Lake City, 
Utah 

能夠逃脫換行符是一件很好的事情,但是需要轉義列分隔符。現在我正在考慮用spark.textFile讀取這些行,然後使用一些CSV庫來解析各行。這將修復我的轉義列分隔符問題,但不會轉義行分隔符。

+0

你能提供樣品行格式嗎? –

+0

我認爲你是對的,請[檢查](https://github.com/databricks/spark-csv/blob/master/src/main/scala/com/databricks/spark/csv/package.scala) –

+0

示例數據添加到問題。 –

回答

0

看來這在CSV閱讀器中不受支持(請參閱https://github.com/databricks/spark-csv/issues/390)。

我會猜測最簡單的方法是手動解析行;並不理想,但仍然有用,並不太難。

您可以使用負向後視正則表達式分割您的線條,例如(?<!\\), - 這將匹配任何不帶反斜槓的逗號。

相關問題