【问题标题】:"ImportError: No module named pyRserve" when running AWS Glue job运行 AWS Glue 作业时出现“ImportError:没有名为 pyRserve 的模块”
【发布时间】:2018-06-30 05:31:09
【问题描述】:

当我运行 Glue 作业并尝试导入 pyRserve python 模块(纯 Python)时,我收到此错误:

LogType:stdout
Log Upload Time:Sun Jan 21 12:27:32 +0000 2018
LogLength:206
Log Contents:
Traceback (most recent call last):
File "script_2018-01-21-12-27-05.py", line 8, in <module>
import pyRserve
ImportError: No module named pyRserve
End of LogType:stdout

以下是关于我的工作的详细信息:

$ aws glue get-job --job-name test_trunc
{
    "Job": {
        "Name": "test_trunc",
        "Role": "arn:aws:iam::#CLIPPED#:role/AWSGlueServiceRoleDefault",
        "CreatedOn": 1516192543.117,
        "LastModifiedOn": 1516537317.889,
        "ExecutionProperty": {
            "MaxConcurrentRuns": 1
        },
        "Command": {
            "Name": "glueetl",
            "ScriptLocation": "s3://#CLIPPED#/gluescripts/test_trunc"
        },
        "DefaultArguments": {
            "--TempDir": "s3://#CLIPPED#/jobs/test_trunc/scripts",
            "--extra-py-files": "s3://#CLIPPED#/jobs/test_trunc/python-libs/pyRserve.zip",
            "--job-bookmark-option": "job-bookmark-disable",
            "--job-language": "python"
        },
        "Connections": {
            "Connections": [
                "redshift"
            ]
        },
        "MaxRetries": 0,
        "AllocatedCapacity": 10
    }
}

这是我正在运行的脚本:

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
import pprint
import pyRserve

这是完整的日志:

https://gist.github.com/mattazend/b611d0232d94ade4bc4c16bcb79f73a8

【问题讨论】:

    标签: python amazon-web-services apache-spark aws-glue


    【解决方案1】:

    根据 AWS Glue 文档:

    只能使用纯 Python 库。依赖 C 的库 扩展,例如 pandas Python 数据分析库,不是 还支持。

    如果您使用的库依赖于 C 扩展,我认为即使我们将 python 库作为 zip 文件上传也是行不通的。我曾以与您相同的方式尝试过使用 Pandas、Holidays 等,在联系 AWS Support 时,他们提到它在他们的待办事项列表中(支持这些 python 库),但目前还没有 ETA。

    @Ishwr: 根据此链接https://pypi.python.org/pypi/pyRserve/0.9.1,pyRserve 需要 Numpy 包作为安装的先决条件,如果在安装的库列表中找不到 numpy,则 pyRserve 先安装 numpy继续 pyRserve。

    由于 Glue 不支持 numpy,我相信由于这个原因,pyRserve 不是从 zip 文件安装的,或者它没有被识别/考虑用于作业,因此出现 ImportError。

    pyRserve 由 Ralph Heinkel (www.ralph-heinkel.com) 编写,并且 是在 MIT 许可下发布的。

    快速安装确保已安装 Numpy(版本 1.4.x 或 更高)。

    然后从你的 unix/windows 命令行运行:

    pip pyRserve 手动安装下载 tar.gz 或 zip 包裹。解压后,cd进入pyRserve目录并运行 python setup.py 从命令行安装。

    实际上 pip pyRserve 如果缺少它应该安装 numpy。

    希望是正确的。

    谢谢。

    【讨论】:

      【解决方案2】:

      您是否按照here 的建议在 S3 中为您尝试导入的库使用了 zip 文件?

      【讨论】:

      • 它不起作用,AWS Support 已经确认,目前 Glue 仅支持纯 python 库/包,不支持任何依赖 C 扩展的包。 ImportError 是由于glue无法识别PyServe库的原因。
      • @YuvaKumar 他在问题中说它是一个纯 Python 模块。
      • @Isrwr,请查看我的更新答案,并在答案中添加了 pyRserve 先决条件
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2013-01-14
      相关资源
      最近更新 更多