【发布时间】:2021-08-21 16:50:32
【问题描述】:
我在脚本的早期读取了一个表,但如果在我读取的分区中的基础表发生更改,它将在运行期间失败,例如:
java.io.FileNotFoundException: File does not exist:
hdfs://R2/projects/.../country=AB/date=2021-08-20/part-00005e4-4fa5-aab4-93f02feaf746.c000
即使我专门缓存表并执行操作,如果发生上述情况,脚本仍然会失败。
df.cache()
df.show(1)
我的问题是,这怎么可能?
如果我将数据缓存在内存/磁盘上,为什么底层文件是否更新很重要?
编辑:代码很长,主要是:
-
df=读入表,其底层数据在上述HDFS文件夹中
-
df。 cache() 和 df.show() 紧随其后,因为 Spark 是惰性计算的。使用 show() 进行缓存
-
稍后当我参考 df: 如果基础数据发生更改,脚本将失败并出现 java.io.FileNotFoundException:
new_df= df.join( other_df, 'id', 'right')
【问题讨论】:
-
您能否提供有关您正在运行的代码的更多信息? Spark 由不立即计算的惰性转换组成,这可能会误导您对数据实际发生的情况。关于here的更多信息。
-
这就是为什么我在缓存后立即执行操作,以确保执行缓存。
-
抛出异常的那一行是什么?
-
已添加,正好加入
-
Spark 会在内存不足时自动驱逐缓存的数据。在 join 条件上方放置一个 sleep 语句并检查 spark UI-storage 选项卡并验证缓存数据是否仍然可用。
标签: apache-spark pyspark