Scala&Spark:一次投射多个列
发布时间:2020-12-16 09:27:46 所属栏目:安全 来源:网络整理
导读:由于 VectorAssembler 崩溃,如果传递的列具有除NumericType或BooleanType之外的任何其他类型,并且我正在处理许多TimestampType列,我想知道: 有一种简单的方法,一次投下多个列吗? 基于this answer,我已经有了一个方便的方法来构建一个列: def castColumnTo
由于
VectorAssembler 崩溃,如果传递的列具有除NumericType或BooleanType之外的任何其他类型,并且我正在处理许多TimestampType列,我想知道:
有一种简单的方法,一次投下多个列吗? 基于this answer,我已经有了一个方便的方法来构建一个列: def castColumnTo(df: DataFrame,columnName: String,targetType: DataType ) : DataFrame = { df.withColumn( columnName,df(columnName).cast(targetType) ) } 我想过以递归方式调用castColumn,但我强烈怀疑这是(高效)的方式. 解决方法
在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)) } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |