Spark过滤会重新加载数据吗?

时间:2015-03-10 19:13:46

标签: java groovy apache-spark

这是我非常简单的Spark工作的主体......

def hBaseRDD = sc.newAPIHadoopRDD(config, TableInputFormat.class, ImmutableBytesWritable.class, Result.class)
println "${hBaseRDD.count()} records counted"
def filteredRDD = hBaseRDD.filter({ scala.Tuple2 result ->
    def val = result._2.getValue(family, qualifier)
    val ? new String(val) == 'twitter' : false
} as Function<Result, Boolean>)
println "${filteredRDD.count()} counted from twitter."
println "Done!"

我在spark-submit输出中注意到它似乎两次进入HBase。第一次是在hBaseRDD上调用count,第二次是在调用filter来创建filteredRDD时。有没有办法让它在hBaseRDD中缓存newAPIHadoopRDD调用的结果,以便过滤器只对内存中的数据副本起作用?

1 个答案:

答案 0 :(得分:1)

在计数之前,

hbaseRDD.cache()可以解决问题。

文档详细介绍了这些选项:http://spark.apache.org/docs/1.2.0/programming-guide.html#rdd-persistence