AWS Glue DynamicFrames和下推谓词

时间:2019-02-22 18:41:10

标签: amazon-web-services pyspark aws-glue

我正在为AWS Glue编写一个ETL脚本,该脚本源于S3存储的json文件,在其中创建一个DynamicFrame并尝试使用pushDownPredicate逻辑来限制输入的数据:

No certificate matches private key

表结构是具有分区(所有字符串)RegionCenter,Year,Month,Day和Timestamp的多个列。我收到的错误消息是:

  

调用o70.getDynamicFrame时发生错误。用户的下推谓词:“'1550254844000'和'1550859644703'之间的时间戳”无法针对分区列进行解析:[regionalcenter,hour,year,timestamp,month,day]

我是AWS Glue和Spark的新手,因此,对于为什么无法针对确实包含时间戳的分区列解析谓词时间戳感到非常困惑。我确保表中使用的时间戳以毫秒为单位。来自我们的S3结构的一个示例是:

  

regionalcenter =密苏里州/年= 2019 /月= 2 /天= 11 /小时= 22 /时间戳= 1549924089246

DynamicFrame代码如下:

# Define the data restrictor predicate
now = str(int(round(time.time() * 1000)))
now_minus_7_date = datetime.datetime.now() - datetime.timedelta(days=7)
now_minus_7 =  str(int(time.mktime(now_minus_7_date.timetuple()) * 1000))

last_7_predicate = "\"timestamp BETWEEN '" + now_minus_7 + "' AND '" + now + "'\""
print("Your predicate will be :" + last_7_predicate)

请在这里告诉我还有什么对您有所帮助。对此我并不陌生,我不确定是否还有其他价值。谢谢

1 个答案:

答案 0 :(得分:0)

啊,我引号太多了。考虑解决这个问题:

last_7_predicate = "timestamp between '" + now_minus_7 + "' AND '" + now + "'"