Amazon web services 如何将数据从AWS Glue写入DocumentDB
我正在从事一个个人项目,需要创建一个AWS粘合作业,该作业将进行一些基本转换,并将其移动到DocumentDB数据库 我现在遇到的主要问题是无法将数据移动到DocumentDB数据库 我的胶水作业代码如下:Amazon web services 如何将数据从AWS Glue写入DocumentDB,amazon-web-services,aws-glue,aws-documentdb,aws-glue-spark,Amazon Web Services,Aws Glue,Aws Documentdb,Aws Glue Spark,我正在从事一个个人项目,需要创建一个AWS粘合作业,该作业将进行一些基本转换,并将其移动到DocumentDB数据库 我现在遇到的主要问题是无法将数据移动到DocumentDB数据库 我的胶水作业代码如下: import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext, SparkConf from
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext, SparkConf
from awsglue.context import GlueContext
from awsglue.job import Job
import time
## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
documentdb_uri = "mongodb://mydocumentdb_uri"
documentdb_write_uri = "mongodb://mydocumentdb_uri"
read_docdb_options = {
"uri": documentdb_uri,
"database": "my_db_name",
"collection": "my_collection",
"username": "my_username",
"password": "my_password",
"ssl": "true",
"ssl.domain_match": "false",
}
write_documentdb_options = {
"uri": documentdb_write_uri,
"database": "my_db_name",
"collection": "my_collection",
"username": "my_username",
"password": "my_password"
}
## @type: DataSource
## @args: [database = "my-project-data-database", table_name = "my-project-data-table", redshift_tmp_dir = args["TempDir"], transformation_ctx = "<transformation_ctx>"]
## @return: <output>
## @inputs: []
S3SourceData = glueContext.create_dynamic_frame.from_catalog(database = "my-project-data-database", table_name = "my-project-data-table")
## @type: DataSink
## @args: [database = "my-project-data-database", table_name = "my-project-table-name", redshift_tmp_dir = "<redshift_tmp_dir>", transformation_ctx = "<transformation_ctx>"]
## @return: <output>
## @inputs: [frame = <frame>]
data_to_write_to_documentdb = glueContext.write_dynamic_frame.from_catalog(frame = S3SourceData, database = "my-project-data-database", table_name = "my-project-data-table")
## @type: DropFields
## @args: [paths = [<paths>], transformation_ctx = "<transformation_ctx>"]
## @return: <output>
## @inputs: [frame = <frame>]
Transformed_Example = DropFields.apply(frame = S3SourceData, paths = ['Multiple fields to drop here']
)
# Write the frame to DocumentDB
glueContext.write_dynamic_frame.from_options(Transformed_Example, connection_type="documentdb",
connection_options=write_documentdb_options)
job.commit()
导入系统
从awsglue.transforms导入*
从awsglue.utils导入getResolvedOptions
从pyspark.context导入SparkContext,SparkConf
从awsglue.context导入GlueContext
从awsglue.job导入作业
导入时间
##@params:[作业名称]
args=getResolvedOptions(sys.argv,['JOB\u NAME'])
sc=SparkContext()
glueContext=glueContext(sc)
spark=glueContext.spark\u会话
作业=作业(上下文)
job.init(args['job\u NAME',args)
documentdb_uri=”mongodb://mydocumentdb_uri"
documentdb_write_uri=”mongodb://mydocumentdb_uri"
read_docdb_选项={
“uri”:documentdb_uri,
“数据库”:“我的数据库名称”,
“收藏”:“我的收藏”,
“用户名”:“我的用户名”,
“密码”:“我的密码”,
“ssl”:“true”,
“ssl.domain_match”:“false”,
}
写入文档数据库选项={
“uri”:documentdb_write_uri,
“数据库”:“我的数据库名称”,
“收藏”:“我的收藏”,
“用户名”:“我的用户名”,
“密码”:“我的密码”
}
##@type:DataSource
##@args:[database=“我的项目数据数据库”,table_name=“我的项目数据表”,redshift\u tmp\u dir=args[“TempDir”],transformation\u ctx=“”]
##@return:
##@inputs:[]
S3SourceData=glueContext。从目录(database=“my project data database”,table=“my project data table”)创建动态框架
##@type:DataSink
##@args:[database=“我的项目数据数据库”,table_name=“我的项目表名”,redshift\u tmp\u dir=“”,transformation\u ctx=“”]
##@return:
##@inputs:[frame=]
数据写入文档DB=glueContext。写入动态框架。从目录(框架=S3SourceData,数据库=“我的项目数据数据库”,表名称=“我的项目数据表”)
##@type:DropFields
##@args:[path=[],transformation_ctx=”“]
##@return:
##@inputs:[frame=]
Transformed_Example=DropFields.apply(frame=S3SourceData,path=['Multiple fields to drop here']
)
#将框架写入DocumentDB
glueContext.write\u dynamic\u frame.from\u options(转换的\u示例,connection\u type=“documentdb”,
连接\选项=写入\文档DB\选项)
job.commit()
这个项目只是为了学习,所以我不打算做一些主要的复杂的ETL。我只想从一个S3存储桶中获取数据,我已经用胶水爬虫对它进行了爬网,然后删除一些字段并将其移动到DocumentDB
为了将转换后的数据移动到DocumentDB,我觉得我缺少了一些基本的东西。但是,我想不出来。我已经浏览了Glue和DocumentDB的文档,但是我找不到一个我正在尝试做的示例,或者我只是不理解给出的示例
我已经做了将近10个小时了,如果有人能在这里帮助我,我将不胜感激。您是否遇到任何错误?如果是,您是否验证了作业失败的日志?是的,我检查了日志,并收到以下错误消息:WARN ApacheUtils:NoSuchMethodException在禁用normalizeUri时引发。这表示您正在使用Apache http客户端的旧版本(<4.5.8)。建议使用http客户端版本>=4.5.9,以避免apache客户端4.5.7中引入的破坏性更改和异常处理中的延迟。有关更多信息,请参阅,但我不知道如何解决此问题。所以,看起来我将花一些时间阅读这些内容。这看起来类似于,您可能需要联系AWS支持团队\您是否遇到任何错误?如果是,您是否验证了作业失败的日志?是的,我检查了日志,并收到以下错误消息:WARN ApacheUtils:NoSuchMethodException在禁用normalizeUri时引发。这表示您正在使用Apache http客户端的旧版本(<4.5.8)。建议使用http客户端版本>=4.5.9,以避免apache客户端4.5.7中引入的破坏性更改和异常处理中的延迟。有关更多信息,请参阅,但我不知道如何解决此问题。所以,看起来我将花一些时间来阅读这方面的内容。这看起来类似于,您可能需要联系AWS支持团队\