python - ModuleNotFoundError 因为 PySpark 序列化程序无法找到库文件夹
问题描述
我有以下文件夹结构
- libfolder
- lib1.py
- lib2.py
- main.py
main.py
libfolder.lib1.py
然后调用和libfolder.lib2.py
其他调用。
在本地机器上一切正常,但在我将它部署到 Dataproc 后,我收到以下错误
File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/serializers.py", line 455, in loads
return pickle.loads(obj, encoding=encoding)
ModuleNotFoundError: No module named 'libfolder'
我已将文件夹压缩到xyz.zip
并运行以下命令:
spark-submit --py-files=xyz.zip main.py
序列化程序无法找到libfolder
. 我打包文件夹的方式有问题吗?
这个问题与这个问题类似,但没有得到解答。
编辑:回应伊戈尔的问题
unzip -l 用于 zip 文件返回以下内容
- libfolder
- lib1.py
- lib2.py
- main.py
在 main.py 中 lib1.py 是用这个 import 语句调用的
from libfolder import lib1
解决方案
这对我有用:
$ cat main.py
from pyspark import SparkContext, SparkConf
from subpkg import sub
conf = SparkConf().setAppName("Shell Count")
sc = SparkContext(conf = conf)
text_file = sc.textFile("file:///etc/passwd")
counts = text_file.map(lambda line: sub.map(line)) \
.map(lambda shell: (shell, 1)) \
.reduceByKey(lambda a, b: sub.reduce(a, b))
counts.saveAsTextFile("hdfs:///count5.txt")
$ cat subpkg/sub.py
def map(line):
return line.split(":")[6]
def reduce(a, b):
return a + b
$ unzip -l /tmp/deps.zip
Archive: /tmp/deps.zip
Length Date Time Name
--------- ---------- ----- ----
0 2019-01-07 14:22 subpkg/
0 2019-01-07 13:51 subpkg/__init__.py
79 2019-01-07 14:13 subpkg/sub.py
--------- -------
79 3 files
$ gcloud dataproc jobs submit pyspark --cluster test-cluster main.py --py-files deps.zip
Job [1f0f15108a4149c5942f49513ce04440] submitted.
Waiting for job output...
Hello world!
Job [1f0f15108a4149c5942f49513ce04440] finished successfully.
推荐阅读
- javascript - 从 Tab Chrome Extension Manifest v3 获取数据
- c - 包括头文件中定义的枚举
- c# - 使用 SOAP Web 服务时出错。内容类型多部分/相关;type="application/xop+xml" 与绑定的内容类型不匹配
- python - 如何将 getTimezoneOffset 中的值转换为 python pytz 的名称?
- hibernate - @SQLInsert 如何自动插入所有字段?
- regex - .htaccess 重定向错误,查询字符串更改
- c# - 使用进程调用 cmd.exe 命令的 NUnit 测试未通过
- jquery - 如何更改没有任何标签的文本?
- c# - 从数百万个文本文件中查找更新记录
- python - 如何用 Tweepy 正确回复?