我正在尝试更改Spark 1.6.0中Dataframe的列列表类型。
到目前为止找到的所有示例只允许转换为单个列(df.withColumn)或数据帧中的所有列:
val castedDF = filteredDf.columns.foldLeft(filteredDf)((filteredDf, c) => filteredDf.withColumn(c, col(c).cast("String")))
对于数据框中的列列表,是否有任何有效的批处理方法?
答案 0 :(得分:1)
withColumn
*没有任何问题,但如果您愿意,可以使用select
:
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)
): _*)
*单个选择的执行计划与链式withColumn
的执行计划相同。