2017-06-21 2 views
2

Ich benutze Spark 1.6.1 und Java als Programmiersprache. Der folgende Code funktioniert gut mit Datenrahmen:Spark-Datensatz Gruppe von und Summe

simpleProf.groupBy(col("col1"), col("col2")) 
       .agg(
        sum("CURRENT_MONTH"), 
        sum("PREVIOUS_MONTH") 
       ); 

Aber, es ist nicht Datensätze, eine Idee, wie sich mit dem gleichen mit Daten-Set in Java zu tun/Funken?

Prost

+0

Können Sie Ihren Code posten, der nicht funktioniert? Dies sollte funktionieren, es hängt also davon ab, wie Sie dies versuchen. –

+0

In meinem Fall funktioniert es auch. Können Sie Ihre Ausnahme einfügen? –

+0

Können Sie näher auf _ "es verwendet keine Datensätze" _? Woher weißt du, dass es mit Datensätzen nicht funktioniert? Was ist die Ausgabe, die Sie glauben lässt? –

Antwort

-1

Dies sollte in Ihrem Fall funktionieren.

simpleProf.groupBy(simpleProf.col("col1"), simpleProf.col("col2")) 
      .agg(
       sum(simpleProf.col("CURRENT_MONTH")), 
       sum(simpleProf.col("PREVIOUS_MONTH")) 
    ); 

Oder führen Sie eine SQL-Abfrage

simpleProf.registerTempTable("prof"); 
sqlContext.sql("SELECT sum(CURRENT_MONTH),sum(PREVIOUS_MONTH) FROM prof group by (CURRENT_MONTH, PREVIOUS_MONTH)) 
1

Es funktioniert nicht, in dem Sinne, dass nach dem groupBy ich ein GroupedDataset Objekt erhalten und wenn ich versuche, die Funktion anwenden agg es erfordert typedColumn statt Spalte.

Ahh, gab es nur einige Verwirrung auf, weil die Verschmelzung von Datensatz und Datenrahmen in Spark-2.x, wo es ein groupBy ist, die mit relationalen Spalten arbeiten, und groupByKey, die mit typisierten Spalten funktionieren. Wenn Sie also ein explizites Dataset in 1.6 verwenden, besteht die Lösung darin, Ihre Spalten über die Methode .as zu typisieren.

sum("CURRENT_MONTH").as[Int]