小编Cha*_*les的帖子

火花数据帧缓存/持久性未按预期工作

我有一个执行典型ETL工作的spark 1.3应用程序:它从几个不同的配置单元表中读取数据,对数据帧执行联接和其他操作,最后将输出作为文本文件保存到HDFS位置。

该应用程序运行良好,除了其阶段6经常遇到错误消息,如“未经确认失败”。Spark将重试并最终成功完成所有阶段。

为了加快重试过程,我想缓存第6阶段的父数据帧。我.persist(StorageLevel.MEMORY_AND_DISK_SER)为第6阶段中使用的数据帧添加了代码。但是,当作业运行时,从spark UI中看不到任何内容被缓存/持久化。当第6阶段失败时,将再次重新计算所有需要的数据。

这对于两个集群是相同的,一个独立,一个在Yarn下。我也尝试过.cache(),或其他,.persist(StorageLevel.MEMORY_ONLY)但结果相同。我不确定是什么原因造成的。与可用内存相比,我要缓存的数据并不大(〜50G与〜500G)。唯一值得一提的是,我要缓存的数据从未被使用过一次以上-从理论上讲,如果第6阶段不会常规失败,则根本不需要缓存。

任何人都对为什么持久性/缓存行为如此有更多见解?

dataframe apache-spark

1
推荐指数
1
解决办法
6914
查看次数

标签 统计

apache-spark ×1

dataframe ×1