由于 VectorAssembler
崩溃,如果传递的列具有NumericType
或BooleanType
以外的任何其他类型,并且我正在处理许多TimestampType
列,我想知道:
有一种简单的方法可以一次转换多列吗?
基于this answer,我已经有一种方便的方法来转换单个列:
def castColumnTo(df: DataFrame,
columnName: String,
targetType: DataType ) : DataFrame = {
df.withColumn( columnName, df(columnName).cast(targetType) )
}
我曾考虑过递归调用
castColumnTo
,但我强烈怀疑这是(性能)方法。
最佳答案
在scala中使用惯用方法类型转换所有列
def castAllTypedColumnsTo(df: DataFrame, sourceType: DataType, targetType: DataType) = {
df.schema.filter(_.dataType == sourceType).foldLeft(df) {
case (acc, col) => acc.withColumn(col.name, df(col.name).cast(targetType))
}
}
关于scala - Scala和Spark : Cast multiple columns at once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41997462/