Нет данных на S3, но есть данные, когда данные сканируются в каталог данных - PullRequest
0 голосов
/ 20 апреля 2020

Я сталкиваюсь с сообщением об ошибке, когда я вызываю файл S3 parquet, а затем перезаписываю путь, но работает нормально, если я использовал 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 Афина, ожидаемый результат доступен там.

1 Ответ

0 голосов
/ 24 апреля 2020

Причина такого поведения - модель согласованности S3. S3 обеспечивает согласованность чтения после записи для новых объектов, создаваемых в сегменте. Что касается объекта удаление и модификация , то в конечном итоге соответствует, т. Е. Может потребоваться некоторое время, чтобы отразить обновление или удаление объекта в S3. И, как вы пишете здесь, это будет модификация, следовательно, возможная согласованность.

Подробнее об этом вы можете прочитать в документации AWS: Модель согласованности S3. Хороший пост, чтобы понять его практически и как это можно сделать, можно найти здесь: https://medium.com/@dhruvsharma_50981 / s3-event-data-консистенция-модель-проблемы-и-решение-их-47093365a595

...