S3上没有数据,但是将数据爬网到数据目录时有数据

问题描述 投票:0回答:1

我在调用S3实木复合地板文件然后覆盖路径时遇到错误消息,但是如果我使用append,则可以正常工作。下面的代码只是整个脚本的一部分

df = spark.read.format("jdbc")
.option("driver", jdbc_driver_name)
.option("url", db_url)
.option("dbtable", table_name)
.option("user", db_username)
.option("password", db_password)
.option("fetchSize", 100000).load()

load_test = spark.read.parquet("s3://s3-raw/test_table")

new_test = df.withColumn("load_timestamp", unix_timestamp(lit(timestamp),'yyyy-MM-dd HH:mm:ss').cast("timestamp"))
new_test.write.partitionBy("load_timestamp").format("parquet").mode("overwrite").save("s3://s3-raw/test_table")

我尝试编辑代码(请参见下文),现在可以调用S3镶木文件,然后在路径上覆盖,但是当我检查S3路径(s3:// s3-raw / test_table)时,分区表为load_timestamp那里可用,但里面没有数据。当我将其爬到数据目录并在AWS Athena上查询时,可以在此处获得预期的输出。

load_test = spark.read.parquet("s3://s3-raw/" + 'test_table')

new_test = df.withColumn("load_timestamp", unix_timestamp(lit(timestamp),'yyyy-MM-dd HH:mm:ss').cast("timestamp"))
new_test.write.partitionBy("load_timestamp").format("parquet").mode("overwrite").save("s3://s3-raw/" + 'test_table')
pyspark aws-glue
1个回答
0
投票

这种行为的原因是由于S3一致性模型。 S3为存储桶中正在创建的新对象提供写后读一致性。至于对象删除和修改最终一致的,即,可能需要一些时间才能反映出对象在S3中的更新或删除。在撰写本文时,将进行修改,最终保持一致。

您可以在AWS文档中阅读有关此内容的更多信息:S3一致性模型。可以在这里找到一个很好的文章,以实际了解它以及如何处理它:https://medium.com/@dhruvsharma_50981/s3-eventual-data-consistency-model-issues-and-tackling-them-47093365a595

© www.soinside.com 2019 - 2024. All rights reserved.