2017-08-12 34 views
1

我有一個數據集與下面的模式星火合併兩個單值數據集

|-- Name: string (nullable = true) 
|-- Values: long (nullable = true) 
|-- Count: integer (nullable = true) 

輸入數據集

+------------+-----------------------+--------------+       
|Name  |Values     |Count   | 
+------------+-----------------------+--------------+ 
|A   |1000     |1    | 
|B   |1150     |0    | 
|C   |500     |3    | 
+------------+-----------------------+--------------+ 

我的結果數據集需要是格式

+------------+-----------------------+--------------+       
|Sum(count>0)|  sum(all)   | Percentage | 
+------------+-----------------------+--------------+ 
| 1500 |  2650    | 56.60  | 
+------------+-----------------------+--------------+ 

我的我目前能夠通過運行

獲得單個數據集中的總和(計數> 0)和總和(全部)
val non_zero = df.filter(col(COUNT).>(0)).select(sum(VALUES).as(NON_ZERO_SUM)) 
val total = df.select(sum(col(VALUES)).as(TOTAL_SUM)) 

我不知道該怎麼做才能將兩個獨立的數據集合併到一個數據集中,並用它來計算百分比。

也可以通過更好的方式解決這個相同的問題?

感謝,

回答

0

我會使用單聚集:

import org.apache.spark.sql.functions._ 

df.select(
    sum(when($"count" > 0, $"values')).alias("NON_ZERO_SUM"), 
    sum($"values").alias("TOTAL_SUM") 
) 
+0

這個工作!非常感謝 :) – Vignesh