在Azure Databricks作业中运行python包.egg

时间:2019-05-31 06:50:22

标签: python azure apache-spark pyspark databricks

使用构建工具(setuptools)将我的python代码打包为.egg格式。我想通过azure数据块中的作业来运行此软件包。

我可以通过以下命令在本地计算机上执行程序包。

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)在新的群集模式下创建了一个任务为“火花提交”的作业

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

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

实际:/ databricks / python / bin / python:无法打开文件'/databricks/driver/hello/hello.py':[错误2]没有此类文件或目录

预期:作业应成功执行。

1 个答案:

答案 0 :(得分:0)

我要完成此工作的唯一方法是使用API​​创建Python Job。用户界面出于某些原因不支持此操作。

我使用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上的鸡蛋的一件令人讨厌的事情-您必须先卸载并重新启动群集,然后群集才能选择要部署的任何新版本。

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