【发布时间】:2017-02-22 09:30:41
【问题描述】:
在使用filter 之后,我使用了spark RDD.isEmpty。但是我认为大数据需要花费很多时间,因为isEmpty是take(1)的动作操作。
这里是示例代码。
val data = sc.parallelize(Seq(("a", 1), ("a", 2), ("b", 2), ("b", 3), ("c", 1)))
.reduceByKey(_+_)
.filter(_._2 > 5)
//Array[(String, Int)] = Array()
if(!data.isEmpty()){
//running code...
}
有没有一种有效的方法来检查数据值是否为空?
【问题讨论】:
-
为什么不在 if 循环中使用 data.count()?
-
我认为它不适合大数据。
-
但我认为大数据需要花费很多时间 这感觉更像是一种直觉。您是否对代码进行了基准测试?这是真正的瓶颈吗?
-
您的整体执行时间得到改善的原因是 Spark 实际上并没有做任何事情。请记住,RDD 是惰性的,并且您的
parallelize/reduceByKey/filter操作将不会运行,直到最后有一个操作。isEmpty是一种非常快的操作,与您可以为此类检查执行的任何其他操作相比。 -
@S.Kang
isEmpty在内部使用take(1),因此它们在运行时基本相同。无论哪种情况,它们都非常便宜,需要时间的是对 RDD 的评估,因此数据的加载和任何其他转换,特别是需要 shuffle 的广泛操作,都会产生更大的影响。
标签: performance scala apache-spark