我正在尝试根据如下所示的输入对所有数据框列进行类型转换,如何使用转换所有数据框列的单个命令来执行此操作?以下代码工作正常,但我需要一个适用于任何数据帧的通用命令。预先感谢您的好意建议。
for (colIndex <- 0 to tmpDF.columns.length - 1) {
val columns = df.columns
newdf = df.withColumn(columns(0), df(columns(0)).cast(dataType(0)))
.withColumn(columns(1), df(columns(1)).cast(dataType(1)))
.withColumn(columns(2), df(columns(2)).cast(dataType(2)))
.withColumn(columns(3), df(columns(3)).cast(dataType(3)))
.withColumn(columns(4), df(columns(4)).cast(dataType(4)))
// newdf = df.withColumn(columns(colIndex), df(columns(colIndex)).cast(dataType(colIndex))) --> This didn't work, only last column was updated
}
最佳答案
它只更新最后一列,因为您总是将列附加到 df
,您应该继续附加到 newDF
这应该有效:
var newDF = df
val columns = df.columns
for (colIndex <- tmpDF.columns.indices) {
newDF = newDF.withColumn(columns(colIndex), df(columns(colIndex)).cast(dataType(colIndex)))
}
关于scala - 在 Scala 中转换所有数据框列的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44989587/