Spark 失败,因为 S3 文件已更新。如何消除这个错误?

Posted

技术标签:

【中文标题】Spark 失败,因为 S3 文件已更新。如何消除这个错误?【英文标题】:Spark failing because S3 files are updated. How to eliminate this error? 【发布时间】:2018-11-14 21:55:24 【问题描述】:

我的 Spark 脚本失败,因为在脚本运行时,从中绘制 df 的 S3 存储桶会更新为新文件。我不关心新到达的文件,但显然 Spark 关心。

我已尝试根据错误消息添加 REFRESH TABLE 命令,但这不起作用,因为在执行时无法知道新文件何时到达,因此无法知道该命令的放置位置.我尝试将 REFRESH 命令放在脚本中的 4 个不同位置(换句话说,在脚本中的不同点调用它 4 次) - 都带有相同的失败消息

Caused by: java.io.FileNotFoundException: No such file or directory '<snipped for posting>.snappy.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.

我使用以下命令创建 df:df = spark.table('data_base.bal_daily_posts')

那么我该怎么做才能确保到达 S3 post-script-kickoff 的 S3 文件被忽略并且不会出错?

【问题讨论】:

【参考方案1】:

将您要处理的文件移动到不同的文件夹(键)并指向 spark 仅使用此文件夹

【讨论】:

【参考方案2】:

如果相同(例如,如果读取和写入目录相同,Spark 将首先删除目标中的文件)或其他进程在读取文件时更新了文件,则会发生这种情况。

【讨论】:

以上是关于Spark 失败,因为 S3 文件已更新。如何消除这个错误?的主要内容,如果未能解决你的问题,请参考以下文章

Spark中转换的失败处理

在 emr 中使用 spark 从 S3 读取 avro 失败

Spark S3A 写入省略了上传部分而没有失败

`aws s3 sync` 如何确定文件是不是已更新?

从 Apache Spark 分段上传到 Amazon S3

从 s3 读取文件时 Spark 应用程序停止