如何验证我的书签正常工作?我发现当我在完成之前的工作后立即进行工作时,似乎仍然需要很长时间。这是为什么?我以为它不会读取已经处理过的文件?该脚本如下所示:
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
## @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)
inputGDF = glueContext.create_dynamic_frame_from_options(connection_type = "s3", connection_options = {"paths": ["s3://xxx-glue/testing-csv"], "recurse": True}, format = "csv", format_options = {"withHeader": True}, transformation_ctx="inputGDF")
if bool(inputGDF.toDF().head(1)):
print("Writing ...")
inputGDF.toDF() \
.drop("createdat") \
.drop("updatedat") \
.write \
.mode("append") \
.partitionBy(["querydestinationplace", "querydatetime"]) \
.parquet("s3://xxx-glue/testing-parquet")
else:
print("Nothing to write ...")
job.commit()
import boto3
glue_client = boto3.client('glue', region_name='ap-southeast-1')
glue_client.start_crawler(Name='xxx-testing-partitioned')
外观如下:
18/12/11 14:49:03 INFO Client: Application report for application_1544537674695_0001 (state: RUNNING)
18/12/11 14:49:03 DEBUG Client:
client token: N/A
diagnostics: N/A
ApplicationMaster host: 172.31.2.72
ApplicationMaster RPC port: 0
queue: default
start time: 1544539297014
final status: UNDEFINED
tracking URL: http://ip-172-31-0-204.ap-southeast-1.compute.internal:20888/proxy/application_1544537674695_0001/
user: root
18/12/11 14:49:04 INFO Client: Application report for application_1544537674695_0001 (state: RUNNING)
18/12/11 14:49:04 DEBUG Client:
client token: N/A
diagnostics: N/A
ApplicationMaster host: 172.31.2.72
ApplicationMaster RPC port: 0
queue: default
start time: 1544539297014
final status: UNDEFINED
tracking URL: http://ip-172-31-0-204.ap-southeast-1.compute.internal:20888/proxy/application_1544537674695_0001/
user: root
18/12/11 14:49:05 INFO Client: Application report for application_1544537674695_0001 (state: RUNNING)
18/12/11 14:49:05 DEBUG Client:
client token: N/A
diagnostics: N/A
ApplicationMaster host: 172.31.2.72
ApplicationMaster RPC port: 0
queue: default
start time: 1544539297014
final status: UNDEFINED
tracking URL: http://ip-172-31-0-204.ap-southeast-1.compute.internal:20888/proxy/application_1544537674695_0001/
user: root
...
18/12/11 14:42:00 INFO NewHadoopRDD: Input split: s3://pinfare-glue/testing-csv/2018-09-25/DPS/2018-11-15_2018-11-19.csv:0+1194081
18/12/11 14:42:00 INFO S3NativeFileSystem: Opening 's3://pinfare-glue/testing-csv/2018-09-25/DPS/2018-11-14_2018-11-18.csv' for reading
18/12/11 14:42:00 INFO S3NativeFileSystem: Opening 's3://pinfare-glue/testing-csv/2018-09-25/DPS/2018-11-15_2018-11-19.csv' for reading
18/12/11 14:42:00 INFO Executor: Finished task 89.0 in stage 0.0 (TID 89). 2088 bytes result sent to driver
18/12/11 14:42:00 INFO CoarseGrainedExecutorBackend: Got assigned task 92
18/12/11 14:42:00 INFO Executor: Running task 92.0 in stage 0.0 (TID 92)
18/12/11 14:42:00 INFO NewHadoopRDD: Input split: s3://pinfare-glue/testing-csv/2018-09-25/DPS/2018-11-16_2018-11-20.csv:0+1137753
18/12/11 14:42:00 INFO Executor: Finished task 88.0 in stage 0.0 (TID 88). 2088 bytes result sent to driver
18/12/11 14:42:00 INFO CoarseGrainedExecutorBackend: Got assigned task 93
18/12/11 14:42:00 INFO Executor: Running task 93.0 in stage 0.0 (TID 93)
18/12/11 14:42:00 INFO NewHadoopRDD: Input split: s3://pinfare-glue/testing-csv/2018-09-25/DPS/2018-11-17_2018-11-21.csv:0+1346626
18/12/11 14:42:00 INFO S3NativeFileSystem: Opening 's3://pinfare-glue/testing-csv/2018-09-25/DPS/2018-11-16_2018-11-20.csv' for reading
18/12/11 14:42:00 INFO S3NativeFileSystem: Opening 's3://pinfare-glue/testing-csv/2018-09-25/DPS/2018-11-17_2018-11-21.csv' for reading
18/12/11 14:42:00 INFO Executor: Finished task 90.0 in stage 0.0 (TID 90). 2088 bytes result sent to driver
18/12/11 14:42:00 INFO Executor: Finished task 91.0 in stage 0.0 (TID 91). 2088 bytes result sent to driver
18/12/11 14:42:00 INFO CoarseGrainedExecutorBackend: Got assigned task 94
18/12/11 14:42:00 INFO CoarseGrainedExecutorBackend: Got assigned task 95
18/12/11 14:42:00 INFO Executor: Running task 95.0 in stage 0.0 (TID 95)
18/12/11 14:42:00 INFO Executor: Running task 94.0 in stage 0.0 (TID 94)
...我注意到镶木地板上附加了大量重复数据...书签不起作用吗?它已经启用
答案 0 :(得分:3)
来自the docs
作业必须使用--job-bookmark-option
job-bookmark-enable
创建(或者如果使用控制台,则在控制台选项中)。职位还必须有一个职位名称;这将自动传递。
工作必须以Job.Init(jobname)
开始
例如
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
作业必须具有Job.Commit()
才能保存书签的状态并成功完成。
数据源必须是s3源或JDBC(有限的,不是您的用例,因此我将忽略它)。
example in the docs显示使用表名而不是显式S3路径从(胶水/湖形成)目录创建动态帧。这意味着从目录中读取内容仍被视为S3来源;基础文件将在S3上。
s3上的文件必须为JSON,CSV,Apache Avro,0.9和更高版本的XML之一,或者可以为1.0和更高版本的Parquet或ORC
脚本中的数据源必须具有transformation_ctx
参数。
文档说
仅将 transformation_ctx 参数传递给您所使用的那些方法 想要启用书签 您可以将其添加到每个转换中以保存状态,但关键的是您要添加书签的数据源。
来自the docs
job.comit()
并如上所述使用transformation_ctx
对于Amazon S3输入源,工作书签检查最后修改 对象的时间(而不是文件名)来验证哪个 对象需要重新处理。如果您的输入源数据是 自上次作业运行以来已被修改,则当您重新处理文件时 再次运行作业。
您是否已验证路径"s3://xxx-glue/testing-csv"
中的CSV文件尚未包含重复项?您可以使用Glue搜寻器或在Athena中编写DDL在其上创建表并直接查看。或者,创建一个dev端点并运行一个齐柏林飞艇或sagemaker笔记本并逐步执行代码。
在任何地方都没有提到编辑脚本会重置状态,但是,如果您修改了数据源的transformation_ctx
或其他阶段,则可能会影响状态,但是我还没有t证实了这一点。作业有一个Jobname
,用于键控状态,以及用于管理重试的运行号,尝试号和版本号以及最新状态,这意味着对脚本的微小更改不会影响该状态。只要Jobname
是一致的,但是我没有再次验证。
顺便说一句,在代码中测试inputGDF.toDF().head(1)
,然后运行inputGDF.toDF()...
写入数据。 Spark的计算是延迟的,但在这种情况下,您要对数据帧运行等效的动态帧两次,而spark无法缓存或重用它。最好在df = inputGDF.toDF()
之前做类似if
的事情,然后再重复使用df
两次。
答案 1 :(得分:1)
答案 2 :(得分:0)
仅作记录,因为尚未找到答案。
我认为编辑脚本似乎会影响书签……但是我认为应该不会……
答案 3 :(得分:0)
请查看this文档,了解有关AWS Glue书签机制的信息。
基本上,它需要通过控制台(或CloudFormation)启用它,并指定SELECT A.ID,A.Color, group_contact(B.NAME)
FROM A
LEFT JOIN B ON FIND_IN_SET(A.IDDOCT, B.ID)
参数,该参数与其他一些属性(如作业名,源文件名)一起使用以保存检查点信息。如果您更改这些属性之一的值,则Glue会将其视为不同的检查点。
答案 4 :(得分:0)