使用addFile时,出现了java.io.FileNotFoundException。

时间:2018-08-20 08:19:23

标签: pyspark

我遇到一个困惑的问题,我想将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上进行了搜索,但是也许我搜索的关键字不正确。您能帮我找到错误吗?非常感谢。

1 个答案:

答案 0 :(得分:2)

是的

您需要提供完整的HDFS路径,也许如下所示:

sc.addFile('hdfs://<reference_to_name_node_or_name_service_ID>/home/a/part-00000')

这是因为sc.addFile()方法可以接受任何文件系统(本地文件或HDFS,或任何其他Hadoop支持的文件系统,甚至URI)中的文件。