这让我感到惊讶(不幸的是,向某人解释)。
我对以下代码段中内部发生的内容感到好奇。
val rdd = sc.parallelize(null)
rdd == null //false
rdd.isEmpty //NullPointerException
在你问之前,我同意并行化null是有争议的,但这只是我们在流媒体应用程序中遇到的一个条件。
我读到的地方是“空虚”。进入并在内部调用rdd.take(1)
,最终抛出异常,但这似乎与语言行为不一致。此外,我发现在某些情况下,使用NPE返回需要更长时间(几秒钟),尽管这可能是因为它通过网络查找数据。
所以问题是,为什么会发生这种情况?这是预期的行为吗?有没有比缓存NPE更好的方法来解决这个问题?
非常感谢提前!
答案 0 :(得分:3)
heroku create --remote qa
方法需要parallelize
。虽然Seq[T]
是一个有效的替代,null
只要以NullPointerException
的形式进行访问就会被预期,而且它不等于空Seq
。
使用Seq
:
SparkContext.emptyRDD
或emtpy seq
sc.emptyRDD[T]