Допустим, у нас есть таблица Hive foo
, которая поддерживается набором паркетных файлов, например, s3://some/path/to/parquet
. Известно, что эти файлы обновляются не реже одного раза в день, но не всегда в один и тот же час дня.
У меня есть вид на эту таблицу, например, определенный как
spark.sql("SELECT bar, count(baz) FROM foo GROUP BY bar").createOrReplaceTempView('foo_view')
Когда я использую foo_view
, приложение иногда завершается с ошибкой
org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 975.0 failed 4 times, most recent failure: Lost task 0.3 in stage 975.0 (TID 116576, 10.56.247.98, executor 193): com.databricks.sql.io.FileReadException: Error while reading file s3a://some/path/to/parquet. It is possible the underlying files have been updated. You can explicitly invalidate the cache in Spark by running 'REFRESH TABLE tableName' command in SQL or by recreating the Dataset/DataFrame involved.
Я пытался поставить префикс всех моих запросов на foo_view
с помощью вызова spark.catalog.refreshTable('foo')
, но проблема продолжает появляться .
Я правильно делаю? Или я должен вызвать refreshTable()
в представлении вместо исходной таблицы?