So konvertieren Sie eine Fall-Klasse-basierten RDD in ein DataFrame?
Den Spark-Dokumentation veranschaulicht, wie erstellen Sie ein DataFrame von einer RDD, mit Scala case-Klassen zu schließen, ein schema. Ich bin versucht zu reproduzieren, dieses Konzept mit sqlContext.createDataFrame(RDD, CaseClass)
, aber mein DataFrame endet leer. Hier ist mein Scala-code:
//sc is the SparkContext, while sqlContext is the SQLContext.
//Define the case class and raw data
case class Dog(name: String)
val data = Array(
Dog("Rex"),
Dog("Fido")
)
//Create an RDD from the raw data
val dogRDD = sc.parallelize(data)
//Print the RDD for debugging (this works, shows 2 dogs)
dogRDD.collect().foreach(println)
//Create a DataFrame from the RDD
val dogDF = sqlContext.createDataFrame(dogRDD, classOf[Dog])
//Print the DataFrame for debugging (this fails, shows 0 dogs)
dogDF.show()
Den Ausgang bin ich zu sehen ist:
Dog(Rex)
Dog(Fido)
++
||
++
||
||
++
Was bin ich?
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alles, was Sie brauchen, ist nur
Zweite parameter ist Teil der Java-API und erwartet, dass Sie Klasse folgt java beans Konvention (Getter/setter). Ihr Fall Klasse, dieser Konvention nicht folgt, ist also keine Eigenschaft erkannt wird, führt das zu leere DataFrame mit keine Spalten.
error: No TypeTag available for Dog
. Danke!case class
nach außerhalb dermain
. @Vitalii , @ sparkour .. gibt es eine Erklärung dafür, warumcase class
verschoben werden müssen, außerhalb dermain
.abstract
ist ein reserviertes Schlüsselwort und kann nicht verwendet werden, die als Feld-Namen wie mein Fall Klasseabstract
als Feld-Namen. Abhilfe für dieses.Können Sie erstellen eine
DataFrame
direkt von einemSeq
von Fall Klasse Instanzen, die mittoDF
wie folgt:Fall Class-Ansatz wird nicht Funktionieren, in den cluster-Modus. Es gebe
ClassNotFoundException
zu Fall Klasse, die Sie definiert.Konvertieren es eine
RDD[Row]
und definieren das schema IhrerRDD
mitStructField
und danncreateDataFrame
wietoDF()
wird nicht funktionieren, entweder