通读AWS Glue Python ETL文档,当使用以下DynamicFrameReder类并从s3读取json文件时,我无法确定是否有提供显式架构的方法:
create_dynamic_frame_from_options()
此外,使用上面指定的DynamicFrameReader类是否需要添加书签?
我问的原因是,我总是可以使用普通的PySpark进行阅读并以这种方式传递模式,但是我不确定是否不使用Glue函数就能进行书签功能。
答案 0 :(得分:0)
目前尚不清楚您要处理的文件类型。如果是csv,则胶水应该能够根据标头推断模式,前提是您给了它正确的格式选项。
https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format.html
如果推断模式对您不起作用,则适用于任何数据集的一种方法是创建粘合目录数据库和表。如果搜寻器可以工作,那可能是创建(和维护)该架构的最简单方法。但是,如果您无法使用搜寻器,则也可以手动创建表及其架构。然后,您可以使用create_dynamic_frame_from_catalog
,并且在创建动态框架时,将使用数据目录中的架构。
您正确地假设不使用粘合功能便无法添加书签。
答案 1 :(得分:0)
使用DynamicFrameReader时,您可以在schema
中提供的dbtable
参数中指定connection_options
,如下所示:
datasource0 = glueContext\
.create_dynamic_frame\
.from_options("redshift",
{"url": "jdbc-url/database",
"user": "username",
"password": "password",
"dbtable": "schema.table-name",
"redshiftTmpDir": "s3-tempdir-path"},
transformation_ctx = "datasource0")
为了使书签起作用,您需要使用AWS Glue方法并定义transformation_ctx
。在Documentation之后,您将找到以下内容:
为使工作书签正常工作,请启用工作书签参数并设置Transformation_ctx参数。如果不传递transformation_ctx参数,则不会为该方法中使用的动态框架或表启用作业书签。
请注意,作业书签仅适用于s3数据源,而关系数据库的用例有限。
答案 2 :(得分:0)
到目前为止,我已经连续1个月在这个地方了。 鉴于您需要:
对不起,您遇到了死胡同。 在读取csv或json文件甚至事后(使用Glue API)时,根本没有添加模式的选项。如果这不再适用,请发表评论
如@Aida Martinez所述,您可以使用搜寻器来创建架构(表),或者通过Glue控制台或通过运行Athena的“创建表...”脚本来手动创建表。
与@Aid Martinez的评论相反,我相信如果您从Kafka Connect接收文件,则书签将起作用,因为s3上的文件将带有其创建/修改日期的时间戳。而Glue书签会将其作为默认的书签密钥,只要您设置了transform_ctx,就可以进行书签。