2017-02-27 149 views
1

我對使用Spark處理位於HDFS中的非結構化文件有疑問。Spark處理非結構化文件

假設在這種情況下,我們有很多文件位於一個HDFS文件夾中。因此,Spark應用程序將讀取該特定HDFS文件夾中的所有文件並對其進行處理。我在這裏的問題是,如果我們使用下面的代碼在數據幀讀取這些文件,並把它,它會打內存問題的出來,如果HDFS文件夾中包含大量的文件,每個文件都有規模龐大:

df = spark.read.text('/user/tester/datafiles') 

處理HDFS文件的最佳做法或方法是什麼?我們是否需要循環逐個文件並對其進行處理,而不是一次讀取所有文件?

感謝。

+0

我不認爲你需要做任何事情,因爲文件被存儲爲hdfs 128 MB的塊,第二個是火花將只提取它可以在給定的內存中處理的內存量,否則你可以選擇重新分區 –

回答

0

很少理解點

1)spark.read.text是一種轉換。它不會觸發數據讀取。

2)將數據轉換爲DataFrame的操作也可以是轉換。因此可以避免數據加載。 3)最後如果你執行一些操作,讓我們說count()。

  • 作業將被創建。
  • 這項工作將根據洗牌邊界分成多個階段。
  • 每個階段將進一步劃分爲基於分區的多個任務。
  • 現在的任務將基於可用的執行者核心/節點執行!

現在,正如#Akash已經告訴的,對於HDFS,文件已經存儲在塊中。 Spark的默認分區以rdd/block的形式創建分區。因此,任何一點,只有幾塊將被加載進行處理。

+0

感謝Akash Sethi和Rakesh。這意味着Spark將處理與處理部分本身的內存,並且不太可能出現「內存不足」問題?如果爲特定的Spark工作分配了內核和內存,那麼需要更長的時間才能完成而不是異常,對吧? – kcyea