2017-08-12 4 views
1

Ich habe einen Datensatz mit dem folgenden SchemaFunkenzusammenführen von zwei Einzelwert-Datensätze

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

Eingang Datensatz

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

Mein Ergebnisdatensatz des Formats sein muss

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

I Ich bin derzeit in der Lage, die Summe (Anzahl> 0) und Summe (alle) in einzelnen Datensätzen zu erhalten, indem Sie

ausführen
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)) 

Ich habe keine Ahnung, was zu tun ist, um die beiden unabhängigen Datensätze zu einem einzigen Datensatz zusammenzuführen, mit dem ich den Prozentsatz berechnen würde.

Könnte dieses Problem auch besser gelöst werden?

Danke,

Antwort

0

ich einzelne Aggregation verwenden würde:

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

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

Das funktionierte !! Danke vielmals :) – Vignesh