我刚刚开始使用Apache Spark(在Scala中,但语言无关紧要)。我使用独立模式,我想要处理来自本地文件系统的文本文件(因此没有像HDFS那样分发)。
根据textFile
中SparkContext
方法的文档,它将
从HDFS读取文本文件,这是一个本地文件系统(全部可用) 节点),或任何Hadoop支持的文件系统URI,并将其作为一个返回 字符串RDD。
我不清楚的是,是否可以将整个文本文件复制到所有节点,或者输入数据是否已经被分区,例如如果使用4个节点和1000行的csv文件,则每个节点上有250行。
我怀疑每个节点都应该有整个文件,但我不确定。
答案 0 :(得分:9)
每个节点应包含整个文件。在这种情况下,就此文件而言,本地文件系统在逻辑上与HDFS无法区分。
答案 1 :(得分:4)
将file://
添加到您的本地文件路径
答案 2 :(得分:2)
来自Spark的常见问题解答页面 - 如果您不使用Hadoop / HDFS,"如果您在群集上运行,则需要某种形式的共享文件系统(例如,NFS安装在每个节点上的相同路径上)。如果您有这种类型的文件系统,则可以在独立模式下部署Spark。"
答案 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;。这解决了我的问题。