2014-07-14 73 views
12

我剛開始使用Apache Spark(在Scala中,但語言無關緊要)。我正在使用獨立模式,我想從本地文件系統(因此沒有像HDFS那樣分佈)處理文本文件。Spark:如何使用本地文件系統的SparkContext.textFile

按照textFile方法從SparkContext的文件,它會

閱讀從HDFS,本地文件系統(所有 節點上可用),或任何Hadoop的支持的文件系統URI的文本文件,並將其作爲字符串的RDD返回爲 。

我還不清楚的是,如果整個文本文件只能被複制到所有的節點,或者輸入的數據應該已經被分區,如果使用4個節點和1000行csv文件,則每個節點上有250行。

我懷疑每個節點應該有整個文件,但我不確定。

回答

7

每個節點應該包含一個完整的文件。在這種情況下,就這個文件而言,本地文件系統在邏輯上與HDFS無法區分。

+0

沒有提供參考,但假設這是正確的,因爲您的repuation和expierence。謝謝! – herman

+0

謝謝!這是我的想法,但我相信在這種情況下。無論如何 - 請讓我知道你是否有問題。 –

+2

從[外部數據集編程指南](http://spark.apache.org/docs/1.2.1/programming-guide.html#external-datasets): 如果在本地文件系統上使用路徑,則文件還必須在工作節點上的相同路徑上可訪問。將文件複製到所有工作人員或使用網絡安裝的共享文件系統._ – Tobber

1

從Spark的FAQ頁面 - 如果您不使用Hadoop/HDFS,「如果您在羣集上運行,則需要某種形式的共享文件系統(例如,每個節點上的相同路徑上安裝的NFS )如果你有這種類型的文件系統,你可以在獨立模式下部署Spark。「

https://spark.apache.org/faq.html

4

前插file://到本地文件路徑

+1

在我的情況下沒有工作。然而,它只用了一個斜槓: 'sc.textFile('file:/ home/data/lines')。count()' – marvelousNinja

2

使用正確的方法是用三個斜槓。兩個用於語法(就像http://),另一個用於Linux文件系統的掛載點,例如sc.textFile(file:///home/worker/data/my_file.txt)。如果你使用本地模式,那麼只有文件就足夠了。如果是獨立羣集,則必須在每個節點上覆制文件。請注意,文件的內容必須完全相同,否則火花會返回有趣的結果。

1

火花1.6.1

Java的1.7.0_99

節點集羣-3(HDP)。

Case 1:

Running in local mode local[n] 

file:///..file:/..從本地系統讀取文件

Case 2:

`--master yarn-cluster` 

Input path does not exist: for file:/ and file://

和用於file://

java.lang.IllegalArgumentException :Wrong FS: file://.. expected: file:///

1

添加 「文件:///」 URI到位 「文件://」 的。這解決了我的問題。

相關問題