加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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))
 }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读