gpt4 book ai didi

java - Apache Spark isEmpty false 但集合为空

转载 作者:行者123 更新时间:2023-12-01 10:27:21 25 4
gpt4 key购买 nike

当我在 JavaRDD 集合上调用 isEmpty 时,我在使用 Apache Spark 时遇到问题,即使集合为空,它也会返回 false。

这是示例代码(根据我最后一年的项目进行修改,并且我不允许发布任何代码):

sampleRdd = inputRdd.filter(someFilterFunction)
if(sampleRdd.isEmpty()) {
return inputRdd.first();
} else {
return sampleRdd.first(); // JVM points error on this line
}

问题是有时条件为 false,因此 sampleRdd.isEmpty() 返回 false 意味着它不为空,因此执行继续返回尝试检索 first() 元素的语句该集合的但它抛出异常:

Exception in thread "main" java.lang.UnsupportedOperationException: empty collection
at org.apache.spark.rdd.RDD$$anonfun$first$1.apply(RDD.scala:1314)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:147)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:108)
at org.apache.spark.rdd.RDD.withScope(RDD.scala:306)
at org.apache.spark.rdd.RDD.first(RDD.scala:1311)
at org.apache.spark.api.java.JavaRDDLike$class.first(JavaRDDLike.scala:510)
at org.apache.spark.api.java.AbstractJavaRDDLike.first(JavaRDDLike.scala:47)
.
.
.

我有什么遗漏的地方吗?我目前正在本地计算机上运行它,因为它尚未完全开发。

谢谢

编辑:当我收到此错误时,添加更多信息 JVM 指向 sampleRdd.first() 行,因此初始 inputRdd 不为空

EDIT2:我写了一些额外的行,在过滤器之前打印 inputRDD 的大小,在过滤器之后打印 sampleRDD 的大小:

System.out.println(inputRdd.count());  // Returns nonzero possitive int eg.100
sampleRdd = inputRdd.filter(someFilterFunction)
System.out.println(sampleRdd.count()); // Returns int eg. 1
System.out.println(sampleRdd.count()); // Sometimes returns different int than first call eg.3
if(sampleRdd.isEmpty()) {
return inputRdd.first();
} else {
return sampleRdd.first(); // JVM points error on this line
}

我观察到非常有趣的行为,那就是有时 inputRdd.count() 返回 100 但首先 sampleRdd.count() 返回1 和第二个 sampleRdd.count() 返回 3 或与第一次调用基本不同的数字。所以基本上看起来 sampleRdd 的大小在两次调用之间发生变化,因此我假设有时它可能会在传递条件后更改为并尝试调用 first() 返回错误。

知道是什么原因造成的吗?

最佳答案

如果inputRdd原本是空的怎么办?

在这种情况下,sampleRdd 也是空的。因此,samplerdd.isEmpty 的计算结果为 true 并且 inputRdd.first() 抛出异常。

关于java - Apache Spark isEmpty false 但集合为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35294891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com