4

Spark SQL DataFrame/Dataset Ausführungs-Engine verfügt über mehrere äußerst effiziente Zeit & Speicherplatzoptimierungen (z. B. InternalRow & Ausdruck CodeGen). Nach vielen Dokumentationen scheint es für die meisten verteilten Algorithmen eine bessere Option als RDD zu sein.Wann sollte die Spark DataFrame/Dataset API verwendet werden und wann sollte man RDD verwenden?

Allerdings habe ich einige Quellcode-Forschung und bin immer noch nicht überzeugt. Ich habe keinen Zweifel, dass InternalRow viel kompakter ist und viel Speicher sparen kann. Die Ausführung von Algorithmen kann jedoch nicht schneller vordefinierte Ausdrücke speichern. Es ist nämlich in der Source org.apache.spark.sql.catalyst.expressions.ScalaUDF angegeben, dass jeder Benutzer definierte Funktion tut 3 Dinge:

  1. convert Katalysatortyp (verwendet in INTERNALROW) zu Scala Typ (verwendet in GenericRow).
  2. anwenden, um die Funktion
  3. konvertieren von scala Typ Katalysatortyp das Ergebnis zurück

Offenbar ist dies sogar noch langsamer als nur ohne Konvertierung die Funktion direkt auf RDD Anwendung. Kann jemand meine Spekulation durch eine echte Profilerstellung und Codeanalyse bestätigen oder leugnen?

Vielen Dank für jede Anregung oder Einsicht.

Antwort

1

Von diesem Databricks' Blog-Artikel A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets

Wenn RDDs benutzen?

Betrachten Sie diese Szenarien oder Anwendungsfälle für das mit RDDs wenn:

  • Sie Low-Level-Transformation und Aktionen und die Kontrolle über Ihre Dataset wollen;
  • Ihre Daten sind unstrukturiert, z. B. Medienströme oder Streams von Text;
  • Sie möchten Ihre Daten mit der funktionalen Programmierung manipulieren Konstrukte als domänenspezifische Ausdrücke;
  • Sie nicht über zur Einführung eines Schemas, wie Spaltenformat, während die Verarbeitung oder Zugriff auf Datenattribute mit Namen oder Spalte kümmern;
  • und Sie können einige Optimierung und Leistung Vorteile mit DataFrames und Datensätze für strukturierte und semi-strukturierte Daten.

In High Performance Spark ‚s Kapitel 3. Datenrahmen, Datensammlungen und SQL Spark, Sie einige Performance sehen können Sie mit dem Datenrahmen/Dataset API im Vergleich zu RDD

enter image description here

erhalten und in dem Artikel Databricks Sie erwähnt auch, dass Datenrahmen optimiert Raumnutzung im Vergleich zu RDD

enter image description here

finden
Verwandte Themen