Funke und SparkSQL: Wie zu imitieren-Fenster-Funktion?

Beschreibung

Gegeben ein dataframe df

id |       date
---------------
 1 | 2015-09-01
 2 | 2015-09-01
 1 | 2015-09-03
 1 | 2015-09-04
 2 | 2015-09-04

Ich möchte erstellen Sie eine laufende Zähler oder index,

  • gruppiert, die von der gleichen id und
  • nach Datum sortiert in einer Gruppe,

damit

id |       date |  counter
--------------------------
 1 | 2015-09-01 |        1
 1 | 2015-09-03 |        2
 1 | 2015-09-04 |        3
 2 | 2015-09-01 |        1
 2 | 2015-09-04 |        2

Dies ist etwas, das ich erreichen kann mit der Fenster-Funktion, z.B.

val w = Window.partitionBy("id").orderBy("date")
val resultDF = df.select( df("id"), rowNumber().over(w) )

Leider Spark 1.4.1 nicht unterstützt window-Funktionen für regelmäßige dataframes:

org.apache.spark.sql.AnalysisException: Could not resolve window function 'row_number'. Note that, using window functions currently requires a HiveContext;

Fragen

  • Wie kann ich das erreichen der obigen Berechnung auf die aktuelle Spark 1.4.1 ohne mit dem Fenster funktioniert?
  • Wann wird der window-Funktion für die regelmäßige dataframes werden unterstützt in der Funke?

Dank!

  • Tun Sie verwenden müssen, dataframes & SQL -, oder könnten Sie verwenden RDDs? Dies ist ganz einfach mit der groupBy-Methode.
  • RDDs wäre auch in Ordnung. Können Sie bitte skizzieren Sie Ihre Idee mit einer kleinen code-Auszug? Als der SparkSQL ich sehe momentan keinen Weg, wie dies zu tun: haben Sie eine Idee?
InformationsquelleAutor Martin Senne | 2015-09-04
Schreibe einen Kommentar