【问题标题】:Execute egg directly from Azure Data Factory直接从 Azure 数据工厂执行 egg
【发布时间】:2020-07-13 13:45:29
【问题描述】:

问题

如何从 Azure 数据工厂 (AD) 管道执行 egg 文件? 目前我只能从执行 egg 文件的地方调用 Databricks 笔记本。有什么方法可以直接做到这一点?

做了什么

this answer之后,我得到了以下异常:

{
    "errorCode": "3201",
    "message": "Must specify one jar or maven library for jar task, either via jar_uri or libraries.",
    "failureType": "UserError",
    "target": "Execute Egg",
    "details": []
}

代码和结构

在我的本地机器上我可以执行python dist/hello_world-1.0-py2.7.egg,这将打印'Hello world!'

src
 |-__init__.py
 |-main.py
__main__.py
setup.py

setup.py

from setuptools import setup, find_packages

setup(
    name='hello-world',
    version='1.0',
    packages=find_packages(),
    py_modules=['__main__']
)

__main_ _.py

from src.main import run

if __name__ == '__main__':
    run()

src/main.py

def run():
    print('Hello world!')


if __name__ == '__main__':
    run()

【问题讨论】:

  • 如何定义class Main: @classmethod def main(cls): return run(),然后将Main指定为主类名
  • @a_guest 它不起作用。看起来我的鸡蛋只有在根目录中有一个带有if __name__ == '__main__': 部分的__main__.py 文件时才能执行。如果我将此代码替换为一个类,我将无法运行python dist/hello_world-1.0-py2.7.egg
  • @NicoNing Message Must specify one jar... for 3201 未记录在您提供的链接中。我什至在 ADF 都找不到可以证明的证据。
  • @VB_ 我的意思是将该类包含在__main__.py 中,然后将其用作if __name__ == '__main__': Main.main()

标签: python azure azure-data-factory azure-databricks egg


【解决方案1】:

您似乎在 Azure 数据工厂中选择了 Jar 活动,而不是 Python 活动。

在 Jar 活动中,“主类名”需要包含要执行的主方法的类的全名。此类必须包含在作为库提供的 JAR 中。

如果您选择 Python 活动,您可以指定 Python 文件名并上传您的鸡蛋库。

您可以在此处找到有关它的更多详细信息: https://docs.microsoft.com/en-us/azure/data-factory/transform-data-databricks-python

【讨论】:

    猜你喜欢
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2019-02-15
    • 2021-01-05
    • 2022-08-09
    相关资源
    最近更新 更多