【问题标题】:Running python package .egg in Azure Databricks Job在 Azure Databricks 作业中运行 python 包 .egg
【发布时间】:2019-06-01 00:16:55
【问题描述】:

使用构建工具 (setuptools) 将我的 python 代码打包为 .egg 格式。我想通过 azure data-bricks 中的作业运行这个包。

我可以通过以下命令在我的本地机器上执行包。

spark-submit --py-files ./dist/hello-1.0-py3.6.egg hello/pi.py

1) 将包复制到DBFS路径如下,

work-space -> User -> Create -> Library -> Library Source (DBFS) -> Library Type (Python Egg) -> Uploaded

2) 在新集群模式下创建任务为 spark-submit 的作业

3) 为任务配置以下参数,

["--py-files","dbfs:/FileStore/jars/8c1231610de06d96-hello_1_0_py3_6-70b16.egg","hello/pi.py"]

实际:/databricks/python/bin/python: can't open file '/databricks/driver/hello/hello.py': [Errno 2] No such file or directory

预期:作业应该成功执行。

【问题讨论】:

  • 你安装了8c1231610de06d96-hello_1_0_py3_6-70b16.egg吗?您是否创建了一个新集群?

标签: python azure apache-spark pyspark databricks


【解决方案1】:

我让它工作的唯一方法是使用 API 创建一个Python Job。出于某种原因,UI 不支持此功能。

我使用PowerShell 来处理 API - 这是一个使用适合我的鸡蛋创建工作的示例:

$Lib = '{"egg":"LOCATION"}'.Replace("LOCATION", "dbfs:$TargetDBFSFolderCode/pipelines.egg")
$ClusterId = "my-cluster-id"
$j = "sample"
$PythonParameters = "pipelines.jobs.cleansed.$j"
$MainScript = "dbfs:" + $TargetDBFSFolderCode + "/main.py"
Add-DatabricksDBFSFile -BearerToken $BearerToken -Region $Region -LocalRootFolder "./bin/tmp" -FilePattern "*.*"  -TargetLocation $TargetDBFSFolderCode -Verbose
Add-DatabricksPythonJob -BearerToken $BearerToken -Region $Region -JobName "$j-$Environment" -ClusterId $ClusterId `
    -PythonPath $MainScript -PythonParameters $PythonParameters -Libraries $Lib -Verbose

这会将我的 main.py 和 pipelines.egg 复制到 DBFS,然后创建一个指向它们的作业,并传入一个参数。

关于 Databricks 上的 Egg 的一件烦人的事情 - 您必须先卸载并重新启动集群,然后它才能拾取您部署的任何新版本。

如果您使用工程集群,这不是问题。

【讨论】:

  • 能够听从您的建议。使用命令 Add-DatabricksDBFSFile 将 main.py 和 *.egg 复制到 DBFS。当我使用命令 Add-DatabricksPythonJob 触发作业时,它会读取文件并打印 main.py 的内容,而不是执行文件并返回结果。 Example: \nfrom __future__ import print_function\n\nimport sys\nfrom random import random\nfrom operator import add\n\nfrom pyspark.sql import SparkSession\n\n\ndef helloworld():\n\t return "Hello World"\n
  • ["--py-files","dbfs:/FileStore/jars/8c1231610de06d96-hello_1_0_py3_6-70b16.egg","dbfs:path/hello/pi.py"] 所以这样它可以工作吗?
猜你喜欢
  • 1970-01-01
  • 2020-01-06
  • 2022-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
相关资源
最近更新 更多