Lassen Sie uns sagen, dass ich etwas ausführen wollen, wie folgt:SparkR gapply - Funktion gibt eine mehrreihige R Datenrahmen
library(SparkR)
...
df = spark.read.parquet(<some_address>)
df.gapply(
df,
df$column1,
function(key, x) {
return(data.frame(x, newcol1=f1(x), newcol2=f2(x))
}
)
, wo die Rückkehr der Funktion mehrere Zeilen hat. Um es klar zu sagen, die Beispiele in der Dokumentation (die leider viel von der Spark-Dokumentation widerspiegeln, wo die Beispiele trivial einfach sind) helfen mir nicht festzustellen, ob dies so gehandhabt wird, wie ich es erwarte.
Ich würde erwarten, dass das Ergebnis davon wäre, für k Gruppen im DataFrame mit n_k Ausgabezeilen pro Gruppe erstellt, dass das Ergebnis des Aufrufs gapply() Summe (1..k, n_k) Zeilen hätte , wobei der Schlüsselwert für jede der n_k Zeilen für jede Gruppe in Schlüssel k repliziert wird ... Das Schemafeld legt jedoch nahe, dass dies nicht so gehandhabt wird - in der Tat schlägt es vor, dass es entweder die Ergebnis in eine einzige Zeile geschoben.
Hoffentlich ist das klar, wenn auch theoretisch (Es tut mir leid, dass ich mein tatsächliches Codebeispiel nicht teilen kann). Kann jemand überprüfen oder erklären, wie eine solche Funktion tatsächlich behandelt wird?
so habe ich sicherlich schon die Dokumentation gelesen, und die Klarheit der Dokumentation ist das Auge des Betrachters (mir war überhaupt nicht klar, dass ein mehrzeiliger Datenrahmen erlaubt ist, auch gibt es kein Beispiel dafür). Die Identitätstransformation wäre ein offensichtliches Beispiel. Wenn das funktioniert, sollte das in der Dokumentation enthalten sein - und das ist es nicht. Auch Ihre zweite Beispielfunktion würde nur eine einzelne Zeile zurückgeben, da Sie nach außen nach Art und dann wieder nach innen gruppieren, was bedeutet, dass das Insider dpylr :: group_by überflüssig ist ... so dass es das auch nicht unbedingt darstellt. –
Das zweite Beispiel zeigt nur, dass die Anzahl der Zeilen von der Anzahl der Zeilen bei der Eingabe abweichen kann. In der Praxis denken Sie an 'gapply' als ein Äquivalent von' dplyr :: group_by%>% dplyr :: summarize 'oder' split%>% lapply' – zero323
nichtsdestoweniger, ich habe die Identität und mehrere andere Beispiele ausgeführt und für mich selbst bestätigt dass das Zurückgeben eines mehrzeiligen Datenrahmens gültig ist.Ich akzeptiere diese Antwort mit den Vorbehalten bezüglich der Dokumentation in SparkR. –