【发布时间】:2018-12-18 09:46:46
【问题描述】:
我是 spark/scala 的新手。我最初的 RDD 是 Records 类型,记录的布局是:
a_key, b_key,c_key,f_name,l_name,address
现在我必须:
- 删除 a_key 或 b_key 或 c_key 为 null/空的记录
- 我必须同时更新无效记录的计数器。
我试过这样:
sc.register( recordStatsAccumulator, "Stat accumulator for " + filename )
val nullFilteredRecords = records.map{ record =>
if( record.A_KEY.isEmpty ||
record.B_KEY.isEmpty ||
record.C_KEY.isEmpty )
{
recordStatsAccumulator.add( ValidationLoggingUtil.INVALID )
}
record
}
.filter( record =>
!record.A_KEY.isEmpty &&
!record.B_KEY.isEmpty &&
!record.C_KEY.isEmpty
)
但是,此代码效率不高,因为它两次遍历整个 RDD。首先,更新无效记录的计数器,然后再次删除无效记录。
有没有更好/有效的方法来做到这一点?
【问题讨论】:
标签: scala apache-spark apache-spark-sql