Spark:如何将SparkContext.textFile用于本地文件系统

时间:2014-07-14 11:28:07

标签: apache-spark

我刚刚开始使用Apache Spark(在Scala中,但语言无关紧要)。我使用独立模式,我想要处理来自本地文件系统的文本文件(因此没有像HDFS那样分发)。

根据textFileSparkContext方法的文档,它将

  

从HDFS读取文本文件,这是一个本地文件系统(全部可用)   节点),或任何Hadoop支持的文件系统URI,并将其作为一个返回   字符串RDD。

我不清楚的是,是否可以将整个文本文件复制到所有节点,或者输入数据是否已经被分区,例如如果使用4个节点和1000行的csv文件,则每个节点上有250行。

我怀疑每个节点都应该有整个文件,但我不确定。

6 个答案:

答案 0 :(得分:9)

每个节点应包含整个文件。在这种情况下,就此文件而言,本地文件系统在逻辑上与HDFS无法区分。

答案 1 :(得分:4)

file://添加到您的本地文件路径

答案 2 :(得分:2)

来自Spark的常见问题解答页面 - 如果您不使用Hadoop / HDFS,"如果您在群集上运行,则需要某种形式的共享文件系统(例如,NFS安装在每个节点上的相同路径上)。如果您有这种类型的文件系统,则可以在独立模式下部署Spark。"

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

答案 3 :(得分:2)

正确的使用方法是使用三个斜杠。两个用于语法(就像http://)和一个用于linux文件系统的挂载点,例如sc.textFile(file:///home/worker/data/my_file.txt)。如果您使用的是本地模式,那么只有文件就足够了。如果是独立群集,则必须在每个节点上复制该文件。请注意,文件的内容必须完全相同,否则spark会返回有趣的结果。

答案 4 :(得分: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:///

答案 5 :(得分:1)

添加&#34; file:///&#34; uri取代&#34; file://&#34;。这解决了我的问题。