我遇到一个困惑的问题,我想将hdfs文件上传到所有Spark工作者,代码如下:
import sys
import os
from pyspark.ml.feature import Word2Vec
from pyspark import SparkConf, SparkContext
from pyspark.sql import Row
import jieba.posseg as posseg
import jieba
if __name__ == "__main__":
reload(sys)
sys.setdefaultencoding('utf-8')
conf = SparkConf().setAppName('fenci_0')
sc = SparkContext(conf=conf)
date = '20180801'
scatelist = ['95']
#I want to add a hdfs_file to all spark worker
hdfs_file_path = '/home/a/part-00000'
sc.addFile(hdfs_file_path)
...
...
但是出现了类似“ java.io.FileNotFoundException:添加的文件文件不存在”的错误。
但是我可以访问hdfs_file_path,并且可以获得文件内容。为什么会这样?我想添加一个hdfs文件时,sc.addFile可能需要一些前缀,例如'sc.add('hdfs //:hdfs_file_path')'?
我已经在Google和stackoverflow上进行了搜索,但是也许我搜索的关键字不正确。您能帮我找到错误吗?非常感谢。
答案 0 :(得分:2)
是的
您需要提供完整的HDFS路径,也许如下所示:
sc.addFile('hdfs://<reference_to_name_node_or_name_service_ID>/home/a/part-00000')
这是因为sc.addFile()
方法可以接受任何文件系统(本地文件或HDFS,或任何其他Hadoop支持的文件系统,甚至URI)中的文件。