【发布时间】:2017-11-08 18:54:42
【问题描述】:
我从命令行尝试了sc.addFile 选项(没有任何问题)和--files 选项(失败)。
运行 1:spark_distro.py
from pyspark import SparkContext, SparkConf
from pyspark import SparkFiles
def import_my_special_package(x):
from external_package import external
ext = external()
return ext.fun(x)
conf = SparkConf().setAppName("Using External Library")
sc = SparkContext(conf=conf)
sc.addFile("/local-path/readme.txt")
with open(SparkFiles.get('readme.txt')) as test_file:
lines = [line.strip() for line in test_file]
print(lines)
int_rdd = sc.parallelize([1, 2, 4, 3])
mod_rdd = sorted(int_rdd.filter(lambda z: z%2 == 1).map(lambda x:import_my_special_package(x)))
外部包:external_package.py
class external(object):
def __init__(self):
pass
def fun(self,input):
return input*2
readme.txt
MY TEXT HERE
spark-submit 命令
spark-submit \
--master yarn-client \
--py-files /path to local codelib/external_package.py \
/local-pgm-path/spark_distro.py \
1000
输出:按预期工作
['MY TEXT HERE']
但是,如果我尝试使用 --files(而不是 sc.addFile)选项从命令行传递文件(readme.txt),则会失败。 如下所示。
运行 2:spark_distro.py
from pyspark import SparkContext, SparkConf
from pyspark import SparkFiles
def import_my_special_package(x):
from external_package import external
ext = external()
return ext.fun(x)
conf = SparkConf().setAppName("Using External Library")
sc = SparkContext(conf=conf)
with open(SparkFiles.get('readme.txt')) as test_file:
lines = [line.strip() for line in test_file]
print(lines)
int_rdd = sc.parallelize([1, 2, 4, 3])
mod_rdd = sorted(int_rdd.filter(lambda z: z%2 == 1).map(lambda x: import_my_special_package(x)))
external_package.py同上
火花提交
spark-submit \
--master yarn-client \
--py-files /path to local codelib/external_package.py \
--files /local-path/readme.txt#readme.txt \
/local-pgm-path/spark_distro.py \
1000
输出:
Traceback (most recent call last):
File "/local-pgm-path/spark_distro.py", line 31, in <module>
with open(SparkFiles.get('readme.txt')) as test_file:
IOError: [Errno 2] No such file or directory: u'/tmp/spark-42dff0d7-c52f-46a8-8323-08bccb412cd6/userFiles-8bd16297-1291-4a37-b080-bbc3836cb512/readme.txt'
sc.addFile 和 --file 是否用于相同目的?有人可以分享您的想法吗?
【问题讨论】:
-
只是出于好奇,你为什么一直在
spark-submit中包含1000?没错,它在示例中使用,但只是因为它确实是SparkPi.scala和pi.py的预期参数,而您的spark_distro.py不是这种情况... -
@desertnaut 上面的错误消息说它正在驱动程序路径“u”/tmp/spark-42dff0d7-c52f-46a8-8323-08bccb412cd6/userFiles-8bd16297-1291 中寻找“readme.txt”文件-4a37-b080-bbc3836cb512/readme.txt'" 并且在日志中我的本地文件('readme.txt')被复制到驱动程序节点位置(使用'--files'选项)。上面的 spark-submit 命令正在使用“yarn-client”。我认为把它改成“yarn-cluster”有什么不同吗?
-
没有(已经检查过)
-
我开始怀疑这两种方法 (
sc.addFile&--files) 不等效 - 无论如何,我没有设法使--files工作,也找不到任何参考从过去的某人在线... -
@desertnaut 你遇到了什么问题
--files???
标签: apache-spark pyspark hadoop-yarn