python - TypeError:“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,但它不起作用。
我怎样才能解决这个问题?
任何一点帮助将不胜感激。
解决方案
最后我自己解决了。
看起来这是 Glue/AWS 特定问题,而不是 spark 或 python。
经过几次试验后,我收到一条错误消息,提示启动 Spark(pyspark) REPL 时“ListObject”操作失败。
ListObject 显然是 boto3 在 S3 上访问内容的 API 调用的名称。
所以我检查了它的 IAM 角色,它已经包含了一些 S3Access 的 AWSGlueConsoleFullAccess,将 AmazonS3FullAccess 策略附加到它,错误消失了。
此外,我制作了另一个胶水开发端点集群,即使没有 S3FullAccess,新集群也没有错误。
也许每次我在胶水集群上唤醒 Spark 时,集群会自动尝试从某个指定的 S3 存储桶中获取一些更新,有时当集群在某个更新发布之前构建时它会遇到麻烦。
推荐阅读
- rust - 为什么线程::睡眠的两次执行的期货::加入不并行运行?
- c++ - 如何在 C++ 中使用线程实现优先级抢占式调度(类似于中断)
- ggplotly - 保存带有指向 HTML 依赖项的链接的 HTMLWidget,而不是嵌入它们
- php - 抛出 Deprecated 警告的代码可以正常工作,但更新后的代码不能正常工作?
- python - Pandas - 删除一些行后如何通过真实索引进行选择?
- r - 如何计算来自不同列的两个连续行之间的时间差?
- react-native - 动画 getLayout() 函数在 react-native 中不起作用
- javascript - Google App Script中的正则表达式在结果后出现大量垃圾
- javascript - 如何使用 React 测试库测试支持 Redux 的组件?
- javascript - Gatsby\React - window.location.href 不工作