2016-04-21 17 views
6

Ich möchte einen DataFrame aus einer Liste von Zeichenfolge erstellen, die vorhandenen Schema übereinstimmen könnte. Hier ist mein Code.Scala Spark: So erstellen Sie eine RDD aus einer Liste von Zeichenfolge und konvertieren in Datenrahmen

val rowValues = List("ann", "f", "90", "world", "23456") // fails 
    val rowValueTuple = ("ann", "f", "90", "world", "23456") //works 

    val newRow = sqlContext.sparkContext.parallelize(Seq(rowValueTuple)).toDF(df.columns: _*) 

    val newdf = df.unionAll(newRow).show() 

Derselbe Code schlägt fehl, wenn ich die Liste der Zeichenkette verwende. Ich sehe den Unterschied ist mit rowValueTuple ein Tuple erstellt wird. Da die Größe der rowValues Liste dynamisch ändert, kann ich Tuple* Objekt nicht manuell erstellen. Wie kann ich das tun? Was vermisse ich? Wie kann ich diese Liste reduzieren, um die Anforderung zu erfüllen?

Schätzen Sie Ihre Hilfe, bitte.

+0

Der erste gibt Ihnen einen DF mit einer Spalte und 5 Zeilen. Die zweite gibt Ihnen einen DF mit einer einzelnen Zeile mit einer einzelnen Spalte, die ein Tupel enthält. Sehr unterschiedliche Dinge. –

Antwort

10

DataFrame hat ein Schema mit einer festen Anzahl von Spalten, daher erscheint es nicht natürlich, Zeilen pro Liste mit variabler Länge zu erstellen. Wie auch immer, Sie können Ihren DataFrame aus RDD [Row] erstellen, indem Sie das existierende Schema wie folgt verwenden:

val rdd = sqlContext.sparkContext.parallelize(Seq(rowValues)) 
val rowRdd = rdd.map(v => Row(v: _*)) 
val newRow = sqlContext.createDataFrame(rdd, df.schema) 
+0

Danke @Vitalität. Ich habe es versucht. Aber etwas verpasst. Ich stimme deinem Standpunkt zu. Aber ich möchte dies für ein gegebenes Paar von Datenrahmen und eine Liste von Zeilenwerten als Parameter durchführen. Es wird angenommen, dass die Anzahl der Spalten des Datenrahmens und die Länge der Zeilenwerte gleich sind. – NehaM

+3

Nur eine Notiz hier, die letzte Zeile sollte sein '' 'val newRow = sqlContext.createDataFrame (rowRdd, df.schema)' '' Zumindest hat das bei mir funktioniert. – Rylan

+3

@Rylan: Was ist 'df' hier? – Dinosaurius

Verwandte Themen