2017-12-14 5 views
0

Ich versuche, den Typ einer Liste von Spalten für einen Dataframe in Spark 1.6.0 zu ändern.So ändern Sie den Spaltentyp für eine Liste von Datenrahmenspalten

Alle gefundenen Beispiele bisher jedoch nur erlauben, für eine einzelne Spalte (df.withColumn) oder für alle Spalten in der Datenrahmen Gießen:

val castedDF = filteredDf.columns.foldLeft(filteredDf)((filteredDf, c) => filteredDf.withColumn(c, col(c).cast("String"))) 

Gibt es eine effiziente, batch Art und Weise, dies zu tun für eine Liste von Spalten im Datenrahmen?

Antwort

1

Es ist nichts falsch mit withColumn * Sie können jedoch select verwenden, wenn Sie bevorzugen:

import org.apache.spark.sql.functions col 

val columnsToCast: Set[String] 
val outputType: String = "string" 

df.select(df.columns map (
    c => if(columnsToCast.contains(c)) col(c).cast(outputType) else col(c) 
): _*) 

* Ausführungsplan das gleiche für eine einzige Auswahl sein wird, wie mit withColumn gekettet.

+0

'withColumn' und' select' sind vollständig äquivalent - Ausführungsplan wird _identisch_ sein. – user8371915

Verwandte Themen