2017-08-10 65 views
0

如何在數據框上應用條件,例如我需要對一列進行groupBy並根據某些條件來計算列中的不同值。這在多列的條件如何在數據框上進行聚合以獲得不同數量的列

我試了下面的方式。請讓我知道我該怎麼做。

case class testRdd(name:String,id:Int,price:Int) 
val Cols = testRdd.toDF().groupBy("id").agg(countDistinct("name").when(col("price")>0,1).otherwise(0) 

這將無法正常工作,或者是否有辦法做類似的事情?在此先感謝

testRdd.toDF().groupBy("id").agg(if(col("price")>0)countDistinct("name")) 

回答

0

testRDD.select( 「名」, 「ID」)。其中($ 「價格」> 0).distinct.groupBy($ 「ID」)。AGG(計數( 「名」 ))。顯示

0

這是一種替代方法,以@羅賓的答案,即引入額外的布爾列組

df.groupBy($"id",when($"price">0,true).otherwise(false).as("positive_price")) 
.agg(
    countDistinct($"name") 
) 
.where($"positive_price") 
.show 
+0

我有多個列應用WHERE條件上,1列,我可以做到這一點,但我無法在其中添加更多列,有沒有辦法在多列上應用 – Babu

相關問題