2016-04-22 12 views
6

Ich habe eine Zeichenfolge wie folgt verschachtelt. Ich mag flache Karte sich eindeutige Zeilen in Spark-So verschachteln Sie ein verschachteltes Dataframe in Spark

Mein Datenrahmen hat

A,B,"x,y,z",D 

Ich mag es Ausgabe wie

A,B,x,D 
A,B,y,D 
A,B,z,D 

zu produzieren konvertieren produzieren Wie kann ich das tun.

Grundsätzlich wie kann ich flache Karte tun und gelten jede Funktion innerhalb der Datenrahmen

Dank

Antwort

14

Funken 2.0+

Dataset.flatMap:

val ds = df.as[(String, String, String, String)] 
ds.flatMap { 
    case (x1, x2, x3, x4) => x3.split(",").map((x1, x2, _, x4)) 
}.toDF 

Funken 1.3+ .

Verwenden split und explodefunctions:

val df = Seq(("A", "B", "x,y,z", "D")).toDF("x1", "x2", "x3", "x4") 
df.withColumn("x3", explode(split($"x3", ","))) 

Spark-1.x

DataFrame.explode (in Spark-2.x veraltet)

df.explode($"x3")(_.getAs[String](0).split(",").map(Tuple1(_))) 
+0

Ich erinnere mich, muss die 'Dataset' Option - Danke, dass du das hinzugefügt hast. –

+0

@DavidGriffin Danke. Ich hätte es als Duplikat schließen sollen, aber ich habe aus Versehen eine falsche Frage markiert, also habe ich beschlossen, etwas zu antworten und etwas Neues hinzuzufügen :) – zero323

+0

@ zero323 Ich habe die scala api docs für 'explode' in' functions' überprüft und es wird nicht als angezeigt veraltet. https://spark.apache.org/docs/2.1.0/api/scala/index.html#org.apache.spark.sql.functions$ – elghoto

Verwandte Themen