Scala Spark java.lang.UnsupportedOperationException:空集合
运行此代码时,在某些情况下会出现空集合错误Scala Spark java.lang.UnsupportedOperationException:空集合,scala,apache-spark,spark-dataframe,Scala,Apache Spark,Spark Dataframe,运行此代码时,在某些情况下会出现空集合错误 val result = df .filter(col("channel_pk") === "abc") .groupBy("member_PK") .agg(sum(col("price") * col("quantityOrdered")) as "totalSum") .select("total
val result = df
.filter(col("channel_pk") === "abc")
.groupBy("member_PK")
.agg(sum(col("price") * col("quantityOrdered")) as "totalSum")
.select("totalSum")
.rdd.map(_ (0).asInstanceOf[Double]).reduce(_ + _)
错误发生在此行:
.rdd.map(_ (0).asInstanceOf[Double]).reduce(_ + _)
当集合为空时,我希望
result
等于0。如何操作?错误仅出现在该行,因为这是您第一次执行某些操作。在此之前,火花不会产生任何效果(懒惰)。你的df是空的。
您可以通过在以下内容之前添加来验证:
断言(!df.take(1.isEmpty)
错误仅出现在该行,因为这是您第一次执行某些操作。在此之前,火花不会产生任何效果(懒惰)。你的df是空的。
您可以通过在以下内容之前添加来验证:
断言(!df.take(1.isEmpty)
当集合为空时,我希望结果等于0。我怎么做
在进行聚合之前,只需检查数据帧是否有一些行
val result = if(df.take(1).isEmpty) 0 else df
.filter(col("channel_pk") === "abc")
.groupBy("member_PK")
.agg(sum(col("price") * col("quantityOrdered")) as "totalSum")
.select("totalSum")
.rdd.map(_(0).asInstanceOf[Double]).reduce(_ + _)
或者您也可以使用count
val result = if(df.count() == 0) 0 else df
.filter(col("channel_pk") === "abc")
.groupBy("member_PK")
.agg(sum(col("price") * col("quantityOrdered")) as "totalSum")
.select("totalSum")
.rdd.map(_(0).asInstanceOf[Double]).reduce(_ + _)
当集合为空时,我希望结果等于0。我怎么做
在进行聚合之前,只需检查数据帧是否有一些行
val result = if(df.take(1).isEmpty) 0 else df
.filter(col("channel_pk") === "abc")
.groupBy("member_PK")
.agg(sum(col("price") * col("quantityOrdered")) as "totalSum")
.select("totalSum")
.rdd.map(_(0).asInstanceOf[Double]).reduce(_ + _)
或者您也可以使用count
val result = if(df.count() == 0) 0 else df
.filter(col("channel_pk") === "abc")
.groupBy("member_PK")
.agg(sum(col("price") * col("quantityOrdered")) as "totalSum")
.select("totalSum")
.rdd.map(_(0).asInstanceOf[Double]).reduce(_ + _)
在转换为rdd之前,是否检查数据帧是否有行?我想是的empty@RameshMaharjan:是的,我的问题是如何检查它是否为空,如果为空则返回0?@RameshMaharjan:请检查我的问题(最后一行)。我不知怎么把它从问题中删掉了。谢谢。@RameshMaharjan:所以,我不明白如何从Noam的断言示例中获取0。@RameshMaharjan:
如果(assert(df.take(1.isEmpty))result=0,其他结果…
?在转换为rdd之前,是否检查数据帧是否有行?我想是的empty@RameshMaharjan:是的,我的问题是如何检查它是否为空,如果为空则返回0?@RameshMaharjan:请检查我的问题(最后一行)。我不知怎么把它从问题中删掉了。谢谢。@RameshMaharjan:所以,我不明白如何从Noam的断言示例中获取0。@RameshMaharjan:如果(assert(df.take(1.isEmpty))result=0,则结果为…
?我注意到我不知怎么删除了邮件的最后一行。当集合为空时有一个问题,我希望结果等于0。我该怎么做?
然后用if语句替换assert,当我注意到我以某种方式删除了邮件的最后一行时,if语句返回0。当集合为空时有一个问题,我希望结果等于0。如何操作?
然后用if语句替换assert,该语句在为空时返回0