类型错误:“JavaPackage”对象在 PySpark、AWS Glue 上不可调用

我已经在 Scala 中学习了 Spark,但我对 pySpark 和 AWS Glue 非常陌生,

所以我遵循了 AWS 的这个官方教程。

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-programming-python-samples-legislators.html


我成功创建了开发端点,

通过 ssh 连接到 pyspark REPL 并输入以下命令:


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


glueContext = GlueContext(SparkContext.getOrCreate())

但在最后一行,我得到了


>>> glueContext = GlueContext(SparkContext.getOrCreate())

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "/usr/share/aws/glue/etl/python/PyGlue.zip/awsglue/context.py", line 44, in __init__

  File "/usr/share/aws/glue/etl/python/PyGlue.zip/awsglue/context.py", line 64, in _get_glue_scala_context

TypeError: 'JavaPackage' object is not callable

我也尝试过手动导入 py4j,但是没有用。


我怎样才能解决这个问题?

任何小帮助将不胜感激。


浮云间
浏览 361回答 1
1回答

慕运维8079593

最后我自己解决了。看起来这是 Glue/AWS 特定的问题,而不是 spark 或 python。经过多次试验,我收到一条错误消息,指出启动 Spark(pyspark) REPL 时“ListObject”操作失败。ListObject 显然是 boto3 的 API 调用名称,用于访问 S3 上的内容。所以我检查了它的 IAM 角色,其中包含 AWSGlueConsoleFullAccess 和一些 S3Access,附加了 AmazonS3FullAccess 策略,错误消失了。此外,我制作了另一个胶水开发端点集群,即使没有 S3FullAccess,新集群也没有错误。也许每次我在胶水集群上唤醒 Spark 时,集群都会自动尝试从某个指定的 S3 存储桶中获取一些更新,有时在某个更新发布之前构建集群时会遇到麻烦。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python