2015-12-02 92 views
0

我有以下簡單的Python代碼:pyspark:找不到本地文件

from __future__ import print_function 

import sys 
from operator import add 

from pyspark import SparkContext 


if __name__ == "__main__": 
    print(len(sys.argv)) 
    if len(sys.argv) < 2: 
     print("Usage: wordcount <file>", file=sys.stderr) 
     exit(-1) 
    sc = SparkContext(appName="PythonWordCount") 
    lines = sc.textFile(sys.argv[2], 1) 
    counts = lines.flatMap(lambda x: x.split(' ')).map(lambda x: (x, 1)).reduceByKey(add) 
    output = counts.collect() 
    for (word, count) in output: 
     print("%s: %i" % (word, count)) 

    sc.stop() 

然後我試圖做一個本地羣集上運行:

spark-submit --master spark://rws-lnx-sprk01:7077 /home/edamameQ/wordcount.py wordcount /home/edamameQ/wordTest.txt 

的wordTest。 TXT絕對可用:

[email protected]:~$ ls 
data jars myJob.txt wordTest.txt wordcount.py 

但我不斷收到錯誤:

Driver stacktrace: 
    at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1283) 
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1271) 
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1270) 
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59) 
: 
: 
Caused by: java.io.FileNotFoundException: File file:/home/edamameQ/wordTest.txt does not exist 
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:520) 
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:398) 
    at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.<init>(ChecksumFileSystem.java:137) 
    at org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:339) 

相同的代碼在AWS上處理來自s3位置的輸入文件。有什麼我需要調整以在本地集羣上運行?謝謝!

回答

1

想要閱讀的文件必須可供所有工作人員訪問。如果這是一個本地文件,唯一的選擇是爲每個工作人員機器保留一份副本。

+0

謝謝!但是,當我在斯卡拉執行Spark工作時,我怎麼會這樣做?我不需要將文件交給所有工作人員?在斯卡拉,我只是把文件放在一個位置,它能正常工作。 scala中的pyspark和spark是否有區別?謝謝! – Edamame

+0

不應該有。你能描述一下你的配置嗎? – zero323

+0

本地火花簇以spark 1.5.1的獨立模式安裝。它有一個主人和五個奴隸。我將所有必需的輸入文本文件放在主節點本地磁盤中。我在scala中有一個spark工作,它讀取本地磁盤中的文件,創建RDD,它是一個更復雜的工作,並且工作正常。現在我正試圖在羣集上測試pyspark,但它找不到該文件。即使我只是把這個文件用在另一個scala工作中,在上面的pyspark工作中找不到它。請讓我知道,如果有任何額外的信息,我應該提供。謝謝! – Edamame