Wann wird die Spark DataFrame / Dataset-API verwendet und wann wird RDD verwendet?

as @Spark SQL DataFrame / Dataset-Ausführungsmodul verfügt über mehrere äußerst effiziente Zeit- und Raumoptimierungen (z. B. InternalRow und expression codeGen). Vielen Dokumentationen zufolge scheint es für die meisten verteilten Algorithmen eine bessere Option als RDD zu sein.

Allerdings habe ich einige Quellcode-Recherchen durchgeführt und bin immer noch nicht überzeugt. Ich habe keinen Zweifel, dass InternalRow viel kompakter ist und viel Speicherplatz sparen kann. Die Ausführung von Algorithmen ist jedoch möglicherweise nicht schneller, wenn vordefinierte Ausdrücke gespeichert werden. Es ist nämlich im Quellcode von @ angegeborg.apache.spark.sql.catalyst.expressions.ScalaUDF, dass jede benutzerdefinierte Funktion 3 Dinge tut:

Katalysatortyp (in InternalRow verwendet) in Scalatyp (in GenericRow verwendet) konvertieren.ende die Funktion @ Das Ergebnis von Scala-Typ auf Katalysatortyp umwandeln

Anscheinend ist dies sogar noch langsamer als das direkte Anwenden der Funktion auf RDD ohne Konvertierung. Kann irgendjemand meine Spekulationen durch eine echte Profilerstellung und Code-Analyse bestätigen oder ablehnen?

Vielen Dank für jeden Vorschlag oder Einblick.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage