为什么persist(StorageLevel.MEMORY_AND_DISK)与使用HBase的cache()给出的结果不同?

时间:2018-08-27 05:15:46

标签: apache-spark java-8 apache-spark-sql hbase apache-spark-1.6

我听起来很天真地问这个问题,但这是我最近在项目中遇到的一个问题。需要对此有一些更好的理解。

df.persist(StorageLevel.MEMORY_AND_DISK)

每当我们在HBase读取中使用此类持久化时-对于其他后续流作业批次,都会一次又一次返回相同的数据,但是每次运行批次时都会更新HBase。

HBase读取代码:

val df = sqlContext.read.options(Map(HBaseTableCatalog.tableCatalog -> schema)).format(dbSetup.dbClass).load().persist(StorageLevel.MEMORY_AND_DISK)

我将persist(StorageLevel.MEMORY_AND_DISK)替换为cache(),它正按预期从HBase表返回更新的记录。

我们尝试使用persist(StorageLevel.MEMORY_AND_DISK)的原因是为了确保内存中的存储空间不会满,并且在执行特定的流期间,我们不会最终再次进行所有的转换。

火花版本-1.6.3 HBase版本-1.1.2.2.6.4.42-1

有人可以向我解释一下并帮助我更好地理解吗?

0 个答案:

没有答案