Spark java.lang.UnsupportedOperationException: 空集合
Spark java.lang.UnsupportedOperationException: empty collection
当我 运行 这段代码时,在某些情况下会出现空集合错误。
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(_ + _)
当collection为空时,我想让result
等于0,怎么办?
错误仅出现在该行,因为这是您第一次执行某些操作。在那个火花不执行任何东西之前(懒惰)。你的 df 是空的。
您可以通过在之前添加来验证它:
assert(!df.take(1).isEmpty)
When collection is empty, I want result to be equal to 0. How can I do it?
在进行聚合之前,只需检查数据框是否有一些行
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(_ + _)
当我 运行 这段代码时,在某些情况下会出现空集合错误。
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(_ + _)
当collection为空时,我想让result
等于0,怎么办?
错误仅出现在该行,因为这是您第一次执行某些操作。在那个火花不执行任何东西之前(懒惰)。你的 df 是空的。
您可以通过在之前添加来验证它:
assert(!df.take(1).isEmpty)
When collection is empty, I want result to be equal to 0. How can I do it?
在进行聚合之前,只需检查数据框是否有一些行
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(_ + _)