取消
顯示的結果
而不是尋找
你的意思是:

自定義行分隔符

ArvindShyamsund
新的貢獻者二世

我看到https://github.com/apache/spark/pull/18581將使定義定製行分隔符對許多來源,包括CSV。除了等待這個公關使它成為主要的磚運行時,有沒有其他替代支持不同的行分隔符?如直接設置HadoopFileLinesReader配置?

1接受解決方案

接受的解決方案

匿名
不適用

布萊恩上麵的回答可能是最簡單的。這裏有一些其他的選擇,以防線。分離器並不來電:

選擇:自定義CSV讀者

修改CSV讀者和上傳圖書館。下麵是步驟:

選擇:修複原始文件…

創建一個程序讀取文件的字節流,維修的字節,並寫出一個新的,修複文件。它簡單的如果你沒有並行,但是你可以並行化,如果你希望通過將文件分為多個1 gb的數據塊,然後提前尋求相關部門處理這些並行。

在原帖子查看解決方案

12個回複12

User16857281974
貢獻者

目前所知的唯一選擇是解決行分隔符之前標準處理。

本著這一精神,我能想到的一個選擇是使用SparkContext.wholeTextFiles (. .)閱讀在一個抽樣,將海關數據的行分隔符,然後有一些附加的選擇:

  • 寫文件的新行分隔符。
  • 將抽樣轉換成DataFrame等一個電話rdd.toDF ()和恢複處理。

這樣做的主要缺點是每個文件的大小。調用wholeTextFiles (. .)將每個文件加載單個分區這意味著我們可以很容易地使用所有可用的內存。

第二個選項我能想到的就是上麵執行相同的操作,但從驅動程序與標準文件IO(如果可能的話)。Scala / Python庫文件操作很簡單讓你讀一塊數據,清理和寫一個新文件。這是一個非常醜陋的實際的解決方案,而不是如果你工作在大多數數據存儲像S3, HDFS等等。

我將嚐試運行這個問題由其他教師和/或工程師是否有一些未知的/無證的解決方案。

User16844369513
新的貢獻者二世

從引用的公關,我假設我們討論處理文件,使用以外的東西\ n劃入lines-e.g。,r \,或\ r \ n。從CSV文件被認為是文本文件,因為Java使用特定於平台的概念行分隔符(Beplay体育安卓版本System.getProperty (“line.separator”)),它可能有可能改變這一係統屬性。然而,我不是100%肯定會工作,沒有(一個)挖掘的源CSV讀者,或(b)在嚐試改變屬性(這需要傳播到執行人)。

我肯定會遠離wholeTextFiles ()的原因,雅各布·帕爾(@SireInsectus)提到。

所以我追下來的所有調用最新版本的源代碼(@Brian克拉珀的幫助),它歸結為如何org.apache.hadoop.util。LineReader實現——簡而言之,它是硬編碼使用CR和低頻如果沒有指定一個特定的記錄分隔符。

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map