Programmgesteuert generieren, die das schema UND die Daten für einen dataframe in Apache Spark

Möchte ich dynamisch generieren Sie einen dataframe mit einem Kopf-Datensatz für einen Bericht so erstellen Sie einen dataframe aus dem Wert die Zeichenfolge unten:

val headerDescs : String = "Name,Age,Location"

val headerSchema = StructType(headerDescs.split(",").map(fieldName => StructField(fieldName, StringType, true)))

Aber jetzt möchte ich das gleiche tun für die Daten (die praktisch die gleichen Daten, d.h. der Metadaten).

Erstelle ich ein RDD :

val headerRDD = sc.parallelize(headerDescs.split(","))

Ich dann verwenden soll createDataFrame, um es zu schaffen:

val headerDf = sqlContext.createDataFrame(headerRDD, headerSchema)

jedoch fehl, weil createDataframe erwartet ein RDD[Row] aber meine RDD ist ein array von strings - ich kann nicht finden, eine Möglichkeit der Umwandlung meiner RDD auf eine Zeile RDD und dann das mapping der Felder dynamisch. Beispiele, die ich gesehen habe, davon ausgehen, Sie kennen die Anzahl von Spalten, aber vorher will ich die Möglichkeit irgendwann in der Lage sein zu ändern die Spalten ohne änderung der code - die Spalten in eine Datei zum Beispiel.

Code-Auszug auf der Grundlage der ersten Antwort:

val headerDescs : String = "Name,Age,Location"

//create the schema from a string, splitting by delimiter
val headerSchema = StructType(headerDescs.split(",").map(fieldName => StructField(fieldName, StringType, true)))

//create a row from a string, splitting by delimiter
val headerRDDRows = sc.parallelize(headerDescs.split(",")).map( a => Row(a))

val headerDf = sqlContext.createDataFrame(headerRDDRows, headerSchema)
headerDf.show()

Ausführen dieser Ergebnisse, in:

+--------+---+--------+

|    Name|Age|Location|

+--------+---+--------+

|    Name|

|     Age|

|Location|

+--------+---+-------
InformationsquelleAutor Jon Robinson | 2017-01-19
Schreibe einen Kommentar