首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Databricks-Connect还返回多个python文件作业找不到的模块

Databricks-Connect还返回多个python文件作业找不到的模块
EN

Stack Overflow用户
提问于 2020-07-10 23:15:17
回答 1查看 1.2K关注 0票数 1

目前,我正在通过databricks-connect与本地VS代码连接数据库。但是我的子任务都有模块未找到的错误,这意味着其他python文件中的代码没有找到。我试过:

  1. 使用main.py将代码移动到文件夹中
  2. 导入使用它的函数中的文件
  3. 通过sparkContext.addPyFile添加文件

有人在这方面有经验吗?或者更好的方式与python项目的databricks交互。

我的python部件代码似乎是在本地python env中执行的,只有与代码直接相关的星星之火才在集群中执行,但是集群并没有加载我所有的python文件。然后引发错误。

我有档案夹

  • main.py lib222.py __init__.py

在lib222.py中使用Foo类

主要代码是:

代码语言:javascript
复制
from pyspark.sql import SparkSession
    
spark = SparkSession.builder.getOrCreate()
    
sc = spark.sparkContext
#sc.setLogLevel("INFO")
    
print("Testing addPyFile isolation")
sc.addPyFile("lib222.py")
from lib222 import Foo
print(sc.parallelize(range(10)).map(lambda i: Foo(2)).collect())

但是我发现了模块的错误,没有找到lib222。

此外,当我打印某些sys信息的python版本时,似乎python代码是在我的本地机器上执行的,而不是在远程驱动程序中执行的。我的db版本是6.6。详细错误:

代码语言:javascript
复制
> Exception has occurred: Py4JJavaError
An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 6, 10.139.64.8, executor 0): org.apache.spark.api.python.PythonException: Traceback (most recent call last):
File "/databricks/spark/python/pyspark/serializers.py", line 182, in _read_with_length
return self.loads(obj)
File "/databricks/spark/python/pyspark/serializers.py", line 695, in loads
return pickle.loads(obj, encoding=encoding)
ModuleNotFoundError: No module named 'lib222'
>
>During handling of the above exception, another exception occurred:
>
>Traceback (most recent call last):
File "/databricks/spark/python/pyspark/worker.py", line 462, in main
func, profiler, deserializer, serializer = read_command(pickleSer, infile)
File "/databricks/spark/python/pyspark/worker.py", line 71, in read_command
command = serializer._read_with_length(file)
File "/databricks/spark/python/pyspark/serializers.py", line 185, in _read_with_length
raise SerializationError("Caused by " + traceback.format_exc())
pyspark.serializers.SerializationError: Caused by Traceback (most recent call last):
File "/databricks/spark/python/pyspark/serializers.py", line 182, in _read_with_length
return self.loads(obj)
File "/databricks/spark/python/pyspark/serializers.py", line 695, in loads
return pickle.loads(obj, encoding=encoding)
ModuleNotFoundError: No module named 'lib222```
EN

回答 1

Stack Overflow用户

发布于 2020-08-16 09:27:05

我在AWS上使用Databricks,我遵循的最佳实践如下-

  • 使用PySpark或conda从本地环境卸载conda
  • 在本地系统上创建一个与Databricks运行时兼容的python环境。拥有虚拟环境可以让您更好地控制设置,并避免版本冲突。conda create -n ENV_NAME python==PYTHON_VERSION

客户端Python安装的次要版本必须与Databricks集群的次要Python版本相同(3.5、3.6或3.7)。Databricks Runtime 5.x有Python3.5,Databricks Runtime5.xML有Python3.6,Databricks Runtime6.1及以上版本有Python3.7。

注意:当pip指向官方版本时,请始终使用pip安装Pyspark。避免使用condaconda-forge安装PySpark。

  • 遵循databricks中的步骤-配置工作区的连接- 正式文件
  • 在databricks集群上,检查现有版本的Pyspark及其依赖项。如果我更正了最新PySpark代码的依赖项的版本细节,如下所示-
  • pandas 0.23.2
  • NumPy 1.7
  • pyarrow 0.15.1
  • Py4J 0.10.9
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62843519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档