Descrizione
Dato un dataframe df
Spark e SparkSQL: come imitare la funzione finestra?
id | date
---------------
1 | 2015-09-01
2 | 2015-09-01
1 | 2015-09-03
1 | 2015-09-04
2 | 2015-09-04
Voglio creare un contatore in esecuzione o di un indice,
- raggruppati per lo stesso ID e
- ordinato per data in quel gruppo,
quindi
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
Questo è qualcosa che posso ottenere con la funzione finestra, ad es.
val w = Window.partitionBy("id").orderBy("date")
val resultDF = df.select(df("id"), rowNumber().over(w))
Purtroppo, Spark 1.4.1 non supporta funzioni finestra per dataframes regolari:
org.apache.spark.sql.AnalysisException: Could not resolve window function 'row_number'. Note that, using window functions currently requires a HiveContext;
Domande
- Come posso raggiungere il calcolo di cui sopra su Spark corrente 1.4.1 senza usando le funzioni della finestra?
- Quando in Spark saranno supportate le funzioni della finestra per i dataframes regolari?
Grazie!
È necessario utilizzare i dataframes e SQL oppure è possibile utilizzare gli RDD? Questo è abbastanza semplice con il metodo groupBy. –
@KirkBroadhurst: anche gli RDD vanno bene. Potresti per favore abbozzare la tua idea con un piccolo estratto di codice? A partire da SparkSQL attualmente non vedo in che modo come si fa: hai un'idea? –