Ho un DataFrame su cui sto operando, e voglio raggruppare una serie di colonne e operare per gruppo sul resto delle colonne. Nel regolare RDD
-land penso che sarebbe simile a questa:Spark DataFrame: operare sui gruppi
rdd.map(tup => ((tup._1, tup._2, tup._3), tup)).
groupByKey().
forEachPartition(iter => doSomeJob(iter))
In DataFrame
-land mi piacerebbe iniziare in questo modo:
df.groupBy("col1", "col2", "col3") // Reference by name
ma poi non sono sicuro di come operare su i gruppi se le mie operazioni sono più complicate della media/min/max/conteggio offerte da GroupedData.
Per esempio, voglio costruire un unico documento MongoDB per ("col1", "col2", "col3")
gruppo (scorrendo le associate s nel gruppo), ridimensionare a N
partizioni, quindi inserire i documenti in un database MongoDB. Il limite N
corrisponde al numero massimo di connessioni simultanee che desidero.
Qualche consiglio?
Modo migliore: scrivere un UDAF (non ancora supportato, vedere SPARK-4233 e SPARK-3947). Fino ad allora, usa DF.RDD per accedere ai metodi RDD come aggregateByKey per ottenere ciò che vuoi creare –