AWS GlueContext 未初始化

Posted

技术标签:

【中文标题】AWS GlueContext 未初始化【英文标题】:AWS GlueContext not getting initialize 【发布时间】:2019-11-08 14:00:50 【问题描述】:

我是 AWS 和胶水服务的新手,正在尝试使用 pycharm,并且我有一个 python 类可以从 S3 位置读取数据,它运行良好。 python 类连接到 DevEndPoint 并对其工作进行颂歌。 我想在我的笔记本电脑上创建类似的实践而不连接到 Devendpoint(就像我们使用 winutils 为 spark-hadoop 应用程序所做的那样),当我在 pycharm 上运行应用程序时,我遇到了以下错误:

C:\Users\****\PycharmProjects\AWSEndpoint\venv\Scripts\python.exe C:/Users/*****/PycharmProjects/AWSEndpoint/src/StackOver.py
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Traceback (most recent call last):
  File "C:/Users/*****/PycharmProjects/AWSEndpoint/src/StackOver.py", line 9, in <module>
    glueContext = GlueContext(sc)
  File "C:\Python\lib\awsglue\context.py", line 45, in __init__
    self._glue_scala_context = self._get_glue_scala_context(**options)
  File "C:\Python\lib\awsglue\context.py", line 66, in _get_glue_scala_context
    return self._jvm.GlueContext(self._jsc.sc())
TypeError: 'JavaPackage' object is not callable

Process finished with exit code 1

下面是我正在使用的代码:

from py4j.java_gateway import java_import
from pyspark.sql.types import StructField, StructType, StringType, Row
from src.readConfig import read_config
from pyspark.sql.types import StringType

# spark = SparkSession.builder.appName('abc').getOrCreate()

from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

newconf = sc._conf.set("spark.sql.catalogImplementation", "in-memory")
sc = sc.getOrCreate(newconf)
glueContext = GlueContext(SparkContext.getOrCreate())


def main():
    # glueContext = GlueContext(SparkContext.getOrCreate())
    logger = glueContext.get_logger()
    logger.info("Job Started")
     inputDf = glueContext.sparkSession.read.csv(input_dir)
     print(inputDf.take(3))


if __name__ == "__main__":
    main()

任何建议都会有所帮助,我尝试了所有 AWS 文档。

【问题讨论】:

GlueContext 很痛苦 :( 我遇到了同样的问题。我打开了 awslabs/aws-glue-libs 项目的问题 ~ github.com/awslabs/aws-glue-libs/issues/58 【参考方案1】:

也许可以尝试使用以下文档在本地开发胶水: https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html

【讨论】:

感谢您的回复,我已经尝试过该文档。当我提交“./bin/gluesparksubmit my_python.py”时,它只是构建它而不做任何事情。 可能值得分享一下为什么您对我的评论投了反对票。这里的场景是使用远程解释器,如果您想在本地运行胶水,我共享的文档可以帮助您这样做。我在我的机器上成功运行了它,它工作得很好,即使是gluesparksubmit。如果您的问题不起作用,请分享您遇到的问题,以便我们了解如何为您提供帮助。 @Eman Mohit 的问题非常具体。如果您提供的文档中有特定的指导,那么分享链接并参考该部分会很有帮助。提供供应商文档并说“这可能会有所帮助”是对问题的很好评论,但不是答案。 @Adam 好吧,我想这里的误解是我的建议是指帮助您在本地开发 Glue 的文档。有问题的场景使用与我的建议不同的远程开发开发端点。答案可以扩展我同意,但文档提供了如何实现这一点的分步指导。你觉得这是不对的吗?

以上是关于AWS GlueContext 未初始化的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue 需要很长时间才能完成

在 AWS Lambda 上处理未初始化或错误的 Redis 连接

AWS Glue - 是不是使用爬虫

如果AWS RDS恢复发生,如何重新连接

aws 胶水 HiveContext 访问胶水 DataCatalog

使用 pyspark aws 胶水时显示 DataFrame