Amazon web services 如何将数据从AWS Glue写入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

我正在从事一个个人项目,需要创建一个AWS粘合作业,该作业将进行一些基本转换,并将其移动到DocumentDB数据库

我现在遇到的主要问题是无法将数据移动到DocumentDB数据库

我的胶水作业代码如下:

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支持团队\