Python pyspark:canned';找不到本地文件

Python pyspark:canned';找不到本地文件,python,hadoop,apache-spark,filesystems,pyspark,Python,Hadoop,Apache Spark,Filesystems,Pyspark,我有以下简单的python代码: 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&

我有以下简单的python代码:

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()
wordTest.txt绝对可用:

edamameQ@spark-cluster:~$ 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)
驱动程序堆栈跟踪:
位于org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1283)
位于org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1271)
位于org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1270)
位于scala.collection.mutable.resizeblearray$class.foreach(resizeblearray.scala:59)
:
:
原因:java.io.FileNotFoundException:File文件:/home/edamameQ/wordTest.txt不存在
位于org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:520)
位于org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:398)
位于org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker(ChecksumFileSystem.java:137)
位于org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:339)

同样的代码在AWS上使用s3位置的输入文件。在本地群集上运行时,是否需要进行任何调整?谢谢

您要读取的文件必须在所有Worker上都可以访问。如果这是本地文件,唯一的选择是为每台工作机器保留一份副本。

谢谢!但是为什么当我在Scala运行spark工作时,我不需要将文件提供给所有员工?在Scala中,我只需将文件放在一个位置,它就能正常工作。pyspark和scala中的spark有区别吗?谢谢不应该有。您能描述一下您的配置吗?本地spark群集在spark 1.5.1中以独立模式安装。它有一个主人和五个奴隶。我将所有必需的输入文本文件放在主节点本地磁盘中。我在scala中有一个spark任务,它读取本地磁盘中的文件,生成RDD,这是一个更复杂的任务,工作正常。现在我试图在集群上测试pyspark,但它找不到该文件。即使我只是拿了在另一个scala作业中使用并运行良好的文件,它也无法在上面的pyspark作业中找到它。请让我知道,如果有任何额外的信息,我应该提供。谢谢只要把文件复制到工作人员那里,看看它是否能解决问题。我很确定它也需要:)一般来说,任何一种分布式文件系统都是有用的,即使是在独立模式下。对于小事情,您可以从脚本中使用
SparkFile
,但它对于传递主数据没有用处,
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)