Apache spark serializers.py中导致PySpark中的ModuleNotFoundError
我正在尝试将Spark应用程序提交到我机器上的本地Kubernetes集群(通过Docker Dashboard创建)。该应用程序依赖于一个python包,我们称之为X 以下是应用程序代码: 导入系统 从pyspark导入SparkContext 从pyspark.sql导入SparkSession datafolder=“/opt/spark/data”#spark的docker文件在容器中创建的文件夹 sys.path.append(datafolder)#X包含在datafolder中 从X.predictor导入*#从X导入功能 def应用功能(项目): predictor=predictor()#来自X.predictor的类 预测器。预测器(项目) def main(): 火花=火花会话\ 建筑商先生\ .appName(“AppX”)\ .getOrCreate() sc=spark.sparkContext 数据=[] #读取数据:[没有问题] ... 数据rdd=sc.parallelize(数据)#创建rdd 数据_rdd.foreach(lambda项:应用_网络(项))35;调用函数 如果名称=“\uuuuu main\uuuuuuuu”: main() 最初,我希望通过将X文件夹放入Spark的数据文件夹来避免此类问题。构建容器时,数据文件夹的所有内容都将复制到/opt/spark/data。我的Spark应用程序将data文件夹的内容附加到系统路径,这样就消耗了程序包X。我想是这样的 在调用.foreach函数之前,一切正常。以下是日志中的一个片段,其中包含错误描述:Apache spark serializers.py中导致PySpark中的ModuleNotFoundError,apache-spark,pyspark,Apache Spark,Pyspark,我正在尝试将Spark应用程序提交到我机器上的本地Kubernetes集群(通过Docker Dashboard创建)。该应用程序依赖于一个python包,我们称之为X 以下是应用程序代码: 导入系统 从pyspark导入SparkContext 从pyspark.sql导入SparkSession datafolder=“/opt/spark/data”#spark的docker文件在容器中创建的文件夹 sys.path.append(datafolder)#X包含在datafolder中 从
20/11/25 16:13:54 WARN TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, 10.1.0.60, executor 2): org.apache.spark.api.python.PythonException: Traceback (most recent call last):
File "/opt/spark/python/lib/pyspark.zip/pyspark/worker.py", line 587, in main
func, profiler, deserializer, serializer = read_command(pickleSer, infile)
File "/opt/spark/python/lib/pyspark.zip/pyspark/worker.py", line 74, in read_command
command = serializer._read_with_length(file)
File "/opt/spark/python/lib/pyspark.zip/pyspark/serializers.py", line 172, in _read_with_length
return self.loads(obj)
File "/opt/spark/python/lib/pyspark.zip/pyspark/serializers.py", line 458, in loads
return pickle.loads(obj, encoding=encoding)
ModuleNotFoundError: No module named 'X'
这里有很多类似的问题:,,但到目前为止,没有一个答案对我有帮助
我尝试过的:
我已经解决了这个问题:
cd/opt/spark/data/**dependencies**&&zip-r../dependencies.zip代码>
。。。
从X.predictor导入*#从X导入功能
...
#拉链包装
zipped_pkg=os.path.join(datafolder,“dependencies.zip”)
断言os.path.exists(压缩包)
sc.addPyFile(压缩包)
...
$SPARK\u主页/bin/SPARK提交\
--k8s主机://https://kubernetes.docker.internal:6443 \
--部署模式群集\
--conf spark.executor.instances=5\
--py文件“local:///opt/spark/data/dependencies.zip" \
local:///opt/spark/data/MyApp.py
$SPARK_HOME/bin/spark-submit \
--master k8s://https://kubernetes.docker.internal:6443 \
--deploy-mode cluster \
--conf spark.executor.instances=5 \
--conf spark.kubernetes.container.image=kostjaigin/spark-py:v3.0.1-X_0.0.1 \
--py-files "local:///opt/spark/data/X.zip" \
local:///opt/spark/data/MyApp.py
sc.addPyFile("opt/spark/data/X.zip")