Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark serializers.py中导致PySpark中的ModuleNotFoundError_Apache Spark_Pyspark - Fatal编程技术网

Apache spark serializers.py中导致PySpark中的ModuleNotFoundError

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中 从

我正在尝试将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函数之前,一切正常。以下是日志中的一个片段,其中包含错误描述:

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'
这里有很多类似的问题:,,但到目前为止,没有一个答案对我有帮助

我尝试过的:

  • 我使用.zip(ed)X提交了申请(我通过将zip应用于X将其压缩到容器中):
  • 我在Spark上下文中添加了.zip(ed)X:

  • 我已经解决了这个问题:

  • 在/opt/spark/data下创建了依赖项文件夹
  • 将X放入依赖项
  • 在我的docker文件中,我将dependencies文件夹打包到一个zip存档中,以便以后以py文件的形式提交:
    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(压缩包)
    ...
    
  • 将--py files标志添加到submit命令:
  • $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
    
  • 运行它
  • 基本上,这都是关于添加一个dependencies.zip存档,其中包含所有必需的依赖项

    $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")