pyspark:找不到本地文件

Posted

技术标签:

【中文标题】pyspark:找不到本地文件【英文标题】:pyspark: couldn't find the local file 【发布时间】:2015-12-02 19:43:21 【问题描述】:

我有以下简单的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()

然后我尝试在本地集群上运行它:

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

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)

相同的代码在 AWS 上使用来自 s3 位置的输入文件。我需要调整什么以在本地集群上运行吗?谢谢!

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢!但是,当我在 Scala 中运行 spark 作业时,为什么不需要将文件提供给所有工作人员?在 Scala 中,我只是将文件放在一个位置,它就可以正常工作。 scala中的pyspark和spark有区别吗?谢谢! 不应该有。你能描述一下你的配置吗? 本地 spark 集群安装为带有 spark 1.5.1 的独立模式。它有一个主人和五个奴隶。我将所有需要的输入文本文件放在主节点本地磁盘中。我在 scala 中有一个 spark 作业,它读取本地磁盘中的文件,制作 RDD,这是一项更复杂的工作并且工作正常。现在我正在尝试在集群上测试 pyspark,但它找不到该文件。即使我只是在另一个 scala 作业中使用并正常工作的文件,它只是无法在上面的 pyspark 作业中找到它。如果我应该提供任何其他信息,请告诉我。谢谢! 把文件复制给worker看看能不能解决问题。 我很确定它也需要它 :) 一般来说,即使在独立模式下,任何类型的分布式文件系统都是有用的。对于小事情,您可以在脚本中使用SparkFiles,但它对于传递主要数据没有用,

以上是关于pyspark:找不到本地文件的主要内容,如果未能解决你的问题,请参考以下文章

开机就显示:Windows 找不到本地配置文件,用临时配置文件让您登录。

Spring的配置文件找不到

找不到连接到本地数据文件所需的数据提供者

错误:找不到本地工作区文件('angular.json')

使用本地 JSON 文件导入时找不到模块

在 Maven 项目中包含本地 jar 文件 - 找不到文件