簡體   English   中英

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)

當collection為空時,我希望結果等於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(_ + _)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM