当RDD不为空时,Spark RDD isEmpty方法抛出NullPointerException

时间:2017-09-18 18:11:37

标签: apache-spark nullpointerexception rdd is-empty

这让我感到惊讶(不幸的是,向某人解释)。

我对以下代码段中内部发生的内容感到好奇。

val rdd = sc.parallelize(null)
rdd == null //false
rdd.isEmpty //NullPointerException

在你问之前,我同意并行化null是有争议的,但这只是我们在流媒体应用程序中遇到的一个条件。

我读到的地方是“空虚”。进入并在内部调用rdd.take(1),最终抛出异常,但这似乎与语言行为不一致。此外,我发现在某些情况下,使用NPE返回需要更长时间(几秒钟),尽管这可能是因为它通过网络查找数据。

所以问题是,为什么会发生这种情况?这是预期的行为吗?有没有比缓存NPE更好的方法来解决这个问题?

非常感谢提前!

1 个答案:

答案 0 :(得分:3)

heroku create --remote qa 方法需要parallelize。虽然Seq[T]是一个有效的替代,null只要以NullPointerException的形式进行访问就会被预期,而且它不等于空Seq

使用Seq

SparkContext.emptyRDD

或emtpy seq

sc.emptyRDD[T]