2016-08-16 5 views
4

Ich arbeite mit Spark 2.0 Scala. Ich bin in der Lage, eine RDD zu einem DataFrame mit der toDF() -Methode zu konvertieren.Spark 2.0 Scala - RDD.toDF()

Aber für das Leben von mir kann ich nicht finden, wo dies in der API-Dokumentation ist. Es ist nicht unter RDD. Aber es ist unter DataSet (link 1). Allerdings habe ich eine RDD nicht ein DataSet.

Auch ich kann es nicht unter implicits (link 2) sehen.

Also bitte helfen Sie mir zu verstehen, warum ToDF() für meine RDD aufgerufen werden kann. Woher wird diese Methode vererbt?

+0

wo rufen Sie diese aus? Funkenschale? –

+0

Ja. Habe einfach ein lokales Spark-Setup und führe mein Scala-Skript mit - ./bin/spark-shell --master local [2] -i /patchtomyscale/myfile.scala – Carl

Antwort

5

Es kommt von hier:

Spark 2 API

Erklärung: Wenn Sie sqlContext.implicits._ importieren Sie eine implizite Methode zur Umwandlung RDD-DataSetHolder (rddToDataSetHolder) haben, können Sie toDF dann rufen die DataSetHolder

+0

Super! Es macht jetzt Sinn, woher diese Methode kommt. – Carl

1

Ja, Sie sollten SqlContext implicits wie das importieren:

val sqlContext = //create sqlContext 

import sqlContext.implicits._ 

val df = RDD.toDF() 

Bevor Sie rufen zu "toDF" in Ihrem RDDs

Grüße.

+0

aus Ich muss es nicht importieren. Mein Code funktioniert so wie er ist. Vielleicht wird es automatisch importiert? Was ich aber nicht verstehe, ist, warum ich in den API-Dokumenten für implicits keine toDF() sehe. Woher kommt es? – Carl

+0

mm .. ok, sorry ich habe deine Frage verstanden. Ich finde, wo ist, und ist in Dataset.scala, aber ich weiß nicht, wie importiert wird: S https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org /apache/spark/sql/Dataset.scala – DanielVL

2

Ja, ich habe endlich eine Entscheidung getroffen, dieses Problem. Es beunruhigte mich höllisch, dieser Beitrag ist ein Lebensretter. Ich habe versucht, generisch Daten von Protokolldateien zu einem Fallklassenobjekt zu laden, das es änderbare Liste machte, diese Idee war, schließlich die Liste in DF umzuwandeln. Da es jedoch änderbar war und Spark 2.1.1 die toDF-Implementierung geändert hat, möchte die Liste nicht konvertiert werden. Ich dachte schließlich sogar daran, die Daten in Datei zu speichern und sie mit .read wieder zu laden. Aber 5 Minuten zurück hatte dieser Beitrag meinen Tag gerettet.

Ich tat genau das gleiche wie beschrieben.

nachdem die Daten auf veränderbare Liste Laden habe ich sofort

import spark.sqlContext.implicits._ 
val df = <mutable list object>.toDF 
df.show()