我在 Databricks-Connect 6.6 中遇到了一种奇怪的行为,我想知道是否有人以前见过这种情况并知道是什么导致了这个问题。
我已经通过 Databricks-Connect 创建了一个本地 Spark 上下文,并且可以成功连接到我的集群并执行任何脚本。但是,一旦我尝试通过将自定义模块添加到我的 Spark 上下文sc.addPyFile()
并使用其中的自定义类/函数,执行将失败并显示ModuleNotFoundError
.
我知道如何将 Python 文件(或包含包的 ZIP 文件)添加到 Spark 上下文中,并且几个月前当我使用 Databricks-Connect 的早期版本时它工作了(我认为 6.2 已经折旧,所以我必须更新)。此外,如果我将包打包为 Wheel 并将其安装在集群上,一切正常。实际上,即使我在通过 Azure ML 在 Databricks 计算目标上运行脚本时将包添加到 Spark 上下文,它也可以正常工作。如果我使用 Databricks-Connect,它似乎就坏了。
在调试时,我检查sys.path
并在那里列出了包/模块,所以看起来即使包被添加到 Spark 上下文中,它也不会被运送到工作节点。
虽然我在使用 时第一次遇到问题joblibspark
,但在我打电话时也会发生
sc.parallelize([1, 2, 3, 4]).mapPartitions(test_function).collect()
我已经测试了针对类似问题提出的所有建议并更改了所有常规参数(Databricks 集群、运行时、本地环境……),但错误仍然存在,并且可以通过运行sc.parallelize()
……通过 Databricks-Connect 轻松重现(并提供test_function 通过一个模块,该模块通过sc.addPyFile()
.
有谁知道如何解决这个问题?