【发布时间】:2018-08-17 13:48:25
【问题描述】:
我正在持久化一些存储在 var 中的数据帧。现在,当该 var 的值发生变化时,持久性如何工作?例如:
var checkedBefore_c = AddressValidation.validateAddressInAI(inputAddressesDF, addressDimTablePath, target_o, target_c, autoSeqColName).distinct.filter(col(CommonConstants.API_QUALITY_RATING) >= minQualityThreshold)
checkedBefore_c.persist(StorageLevel.MEMORY_AND_DISK_SER)
var pre_checkedBefore_c = checkedBefore_c.except(checkedBefore_o)
pre_checkedBefore_c.persist(StorageLevel.MEMORY_AND_DISK_SER)
checkedBefore_c = pre_checkedBefore_c.drop(target_o).drop(autoSeqColName)
.withColumn(target_o, pre_checkedBefore_c(target_c))
.withColumn(CommonConstants.API_STATUS, lit("AI-INSERT"))
.withColumn(CommonConstants.API_ERROR_MESSAGE, lit(""))
checkedBefore_c = CommonUtils.addAutoIncremetColumn(checkedBefore_c, autoSeqColName)
checkedBefore_c = checkedBefore_c.select(addDimWithLoggingSchema.head, addDimWithLoggingSchema.tail: _*)
checkedBefore_c.persist(StorageLevel.MEMORY_AND_DISK_SER)
【问题讨论】:
-
缓存打破了沿袭。第一次致电
persis弊大于利。如果您直到最后都没有调用checkedBefore_c,Spark 可能仍会根据您在checkedBefore_c上进行的一系列转换进行一些优化。 -
因此,对于一个动作,如果我在 checked_before_c 上编写 n 个过滤器以生成 n 个新数据帧,然后我将加入所有这些新数据帧以形成一个我执行写入的数据帧。不需要持久性。我说的对吗?
标签: scala apache-spark hadoop apache-spark-sql hdfs