2017-11-06 1 views
1

aus dem Datensatz und RDD Dokumentation,Verständnis RDD und DataSet

DataSet:

Ein Datensatz ist eine stark typisierte Sammlung von domänenspezifischen Objekten , die parallel mit Hilfe der funktionellen oder relationalen umgewandelt werden kann Operationen. Jeder Datensatz hat auch eine nicht typisierte Ansicht ein Datenrahmen genannt, die ein Datensatz von Zeile ist

RDD:

RDD stellt eine unveränderliche, partitioniert Sammlung von Elementen, die können parallel

operiert werden

auch wird gesagt, der Unterschied zwischen ihnen:

Der Hauptunterschied ist, Datensatz ist Sammlung von domänenspezifischen Objekte, wo RDD Sammlung von Objekten ist. Der Domain-Objektteil der Definition bezeichnet den Schemateil des Datasets. So Datensatz-API ist immer stark typisiert und optimiert mit Schema wo RDD nicht ist.

Ich habe zwei Fragen hier;

  1. was es dataset is collection of domain specific objects while RDD is collection of any object, I bedeutet einen Fall, Klasse Person, dachte DataSet [Person] und RDD [Person] sowohl Sammlung von Domain sind bestimmte Objekte

  2. dataset API is always strongly typed and optimized using schema where RDD is not Warum es das Dataset API gesagt wird immer stark getippt während RDD nicht? Ich dachte, RDD [Person] ist auch stark typisierte

+0

Wer markiert meine Frage geschlossen? Warum sollte es geschlossen sein? – Tom

Antwort

3

Stark Dataset getippt (nicht DataFrame) ist eine Sammlung von Datensatztypen (Scala Products), die interne Speicherformat abgebildet werden unter Verwendung von so Encoders genannt, während RDD speichern willkürlich serialisierbar (Serializable oder Kryo serialisierbares Objekt). Daher ist ein Container wesentlich generischer als Dataset.

Folgende:

. Daher ist die Dataset-API immer stark typisiert (...), wo RDD nicht ist.

ist ein absolut absurd, zeigen, dass Sie nicht alles, was Sie im Internet finden können, vertrauen sollten. Im Allgemeinen Dataset API hat deutlich schwächeren Typ Schutz, als . Dies ist besonders offensichtlich bei der Arbeit Dataset[Row], aber gilt für alle Dataset.

Betrachten wir zum Beispiel folgende:

case class FooBar(id: Int, foos: Seq[Int]) 

Seq[(Integer, Integer)]((1, null)) 
    .toDF.select($"_1" as "id", array($"_2") as "foos") 
    .as[FooBar] 

die eindeutig Typsicherheit bricht.