我已经在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,但这只是无效。
我该如何解决?
任何帮助将不胜感激。
答案 0 :(得分:1)
最后我自己解决了。
看起来这是Glue / AWS特有的问题,而不是spark或python。
经过几次试验,启动Spark(pyspark)REPL时,我收到一条错误消息,提示“ ListObject”操作失败。
ListObject显然是用于访问S3上的内容的boto3 API调用的名称。
因此,我检查了它的IAM角色,该角色已包含AWSGlueConsoleFullAccess和一些S3Access,并对其附加了AmazonS3FullAccess策略,错误消失了。
另外,我创建了另一个胶水开发端点集群,即使没有S3FullAccess,新集群也没有错误。
也许每次我在胶水集群上唤醒Spark时,集群都会自动尝试从某些指定的S3存储桶中获取一些更新,有时在刚发布一些更新版本之前构建集群时会遇到麻烦。