python - 如何在本地运行 Mosaic(在 Databricks 之外)

我在 Databricks 上使用 https://databrickslabs.github.io/mosaic/usage/quickstart.html 来做一些 geospatial 转换,到目前为止效果很好。

随着我的代码库开始增长,我正在寻找一种在本地机器上对 geospatial 转换运行单元测试的方法。但是,我无法在本地进行 Mosaic 工作。这是重现我得到的错误的最小示例:

from mosaic import enable_mosaic
from pyspark.sql import SparkSession

spark_session = (
    SparkSession.builder.master("local[*]").appName("mylib-tests").getOrCreate()
)
enable_mosaic(spark_session)  # <- Error here

这是运行 enable_mosaic(spark_session) 的完整日志,包括我得到的错误:

22/05/18 12:00:23 INFO MosaicLibraryHandler: Looking for Mosaic JAR at /home/nicolas/.pyenv/versions/myenv/lib/python3.9/site-packages/mosaic/lib/mosaic-0.1.1-jar-with-dependencies.jar.
22/05/18 12:00:23 INFO MosaicLibraryHandler: Automatically attaching Mosaic JAR to cluster.
Traceback (most recent call last):
  File "/home/nicolas/.pyenv/versions/myenv/lib/python3.9/site-packages/IPython/core/interactiveshell.py", line 3437, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-4-e83e439e0633>", line 1, in <module>
    enable_mosaic(spark_session)
  File "/home/nicolas/.pyenv/versions/myenv/lib/python3.9/site-packages/mosaic/api/enable.py", line 47, in enable_mosaic
    _ = MosaicLibraryHandler(config.mosaic_spark)
  File "/home/nicolas/.pyenv/versions/myenv/lib/python3.9/site-packages/mosaic/core/library_handler.py", line 29, in __init__
    self.auto_attach()
  File "/home/nicolas/.pyenv/versions/myenv/lib/python3.9/site-packages/mosaic/core/library_handler.py", line 76, in auto_attach
    ManagedLibraryId.defaultOrganization(),
TypeError: 'JavaPackage' object is not callable

我猜我的本地设置和 Databricks 上的环境有些不同,但我找不到丢失的内容。有没有人设法让 Mosaic 在 Databricks 之外工作?

回答1

我终于设法使它工作。

当我更改 spark 会话的配置时,问题消失了,如下所示:

spark_session = (
    SparkSession.builder.master("local[*]")
    .config(
        "spark.jars",
        f"{os.environ['VIRTUAL_ENV']}/lib/python3.9/site-packages/"
        "mosaic/lib/mosaic-0.1.1-jar-with-dependencies.jar",
    )
    .config("spark.databricks.labs.mosaic.jar.autoattach", False)
    .appName("mylib-tests")
    .getOrCreate()
)
enable_mosaic(spark_session)  # works

我希望这可以帮助其他人至少有一些有用的东西,虽然我发现在 python 虚拟环境中引用 jar 文件并不是很干净......如果你有更好的解决方案,请随时离开另一个答案。

相似文章

最新文章