如何从本地计算机使用 python 2.7 执行 aws 胶水脚本?

How to execute aws glue scripts using python 2.7 from local machine?

我的 python 2.7 环境中安装了 aws cliboto3。我想执行各种操作,例如获取架构信息、获取 AWS Glue 控制台中存在的所有表的数据库详细信息。我尝试了以下脚本示例:

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())
persons = glueContext.create_dynamic_frame.from_catalog(
             database="records",
             table_name="recordsrecords_converted_json")
print "Count: ", persons.count()
persons.printSchema()

我收到错误 ImportError: No module named awsglue.transforms,这应该是正确的,因为 boto3 中不存在我使用命令 dir(boto3) 识别的此类包。我发现 boto3 通过 awscli 提供了各种客户端调用,我们可以使用 client=boto3.client('glue') 访问它们。因此,为了获取上述模式信息,我尝试了以下示例代码:

import sys
import boto3
client=boto3.client('glue')
response = client.get_databases(
    CatalogId='string',
    NextToken='string',
    MaxResults=123
)
print client

但是我得到这个错误: AccessDeniedException: An error occurred (AccessDeniedException) when calling the GetDatabases operation: Cross account access is not allowed.

我很确定其中之一或可能两者都是获得我想要获得的东西的正确方法,但这里有些东西不属于正确的位置。像我在上面尝试的那样在本地使用 python 2.7 从 AWS Glue 获取有关模式和数据库表的详细信息有什么想法吗?

以下代码对我有用,并且我使用本地设置的 Zeppelin 笔记本作为开发端点。 printschema 从数据目录中读取模式。

希望您也启用了 ssh 隧道。

%pyspark
import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.transforms import *
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType

# Create a Glue context
glueContext = GlueContext(SparkContext.getOrCreate())

# Create a DynamicFrame using the 'persons_json' table
medicare_dynamicframe = glueContext.create_dynamic_frame.from_catalog(database="payments", table_name="medicaremedicare_hospital_provider_csv")

# Print out information about this data
print "Count:  ", medicare_dynamicframe.count()
medicare_dynamicframe.printSchema()

您可能还需要对 Spark 解释器进行一些更改,(勾选顶部可用的 连接到现有进程 选项,以及主机(本地主机)、端口号( 9007).

对于第二部分 您需要执行aws configure 然后在安装boto3 客户端后创建粘合客户端。在此之后,检查您的代理设置是否隐藏在防火墙或公司网络后面。

需要说明的是,boto3 客户端对所有与 AWS 相关的客户端都有帮助 api,对于服务器端,Zeppelin 方式是最好的。

希望这对您有所帮助。