2017-05-10 6 views
0

Legendes ich die Funktionalität des folgenden Code verstehen wollen:ein Stück Code in Scala

val newDataFrame = myDataFrame.withColumn("date", to_date(myDataFrame("start_date"))) 
      .withColumn("column1", lit(1)) 
      .select($"pk".as("id"), $"date", $"column1") 

Meiner Meinung nach tut es die folgenden drei Schritte:

1) eine neue Spalte date durch Umwandlung von myDataFrame("start_date") in ein Datumsobjekt. In myDataFrame hat die Spalte start_date das folgende Format 2017-05-04 10:22:03.0. Soweit ich verstehe, transformiert to_date es automatisch in ein Datum ohne die Notwendigkeit, ein Format, z. yyyy-MM.....

2) erstellt eine neue Spalte columns1 und füllt sie mit 1 aus.

3) Ich missverstehe diese Linie leicht select($"pk".as("id"), $"date", $"column1"). Was bedeutet $ und warum 3 Spalten ausgewählt sind? Erzeugt es newDataFrame mit nur 3 Spalten id, date und column1?

+0

$ ist implizit in sqlContexts und $ "pk" ist also eine Abkürzung äquivalent zu myDataFrame ("pk"), die die Spalte namens "pk" zurückgibt. .select hat eine Signatur, die die Spalte * akzeptiert. Sie übergeben also drei Spaltenparameter in der Anweisung .select –

Antwort

1

Ihre 1,2 Punkte sind korrekt.

Wie für die dritte: $ "pk" ist die SQL-DSL (aus der impliziten Definition, in der Regel etwas wie import spark.implicits._), die im Grunde das gleiche wie col ("pk") ist. Es findet im Dataframe eine Spalte namens pk.

Die as-Funktion benennt die Spalte um. Also bedeutet "pk" .as ("id"), nimm die Spalte namens pk als Spalte und benenne sie id um.

Also die Auswahl nimmt im Grunde nur die pk, date und column1 Spalten aus dem Datenrahmen (alles andere ignorierend) und benennt pk in id im Ergebnis um.