【问题标题】:Scala Databricks: casting all bigint columns to doubleScala Databricks:将所有 bigint 列转换为加倍
【发布时间】:2019-11-09 23:59:14
【问题描述】:

我参考这个问题:Cast multiples columns in a DataFrame

我有一个包含许多列的数据框。一些开始列(比如 5)不应被触及,因为它们是 ID、名称等。

从第 6 列开始,如果数据类型为 bigint 的列,我想将其转换为 double DataTypes。

目前,我正在使用:

val df2 = df.withColumn("col_name", df.col("col_name").cast(DataTypes.DoubleType))

对于每一列,真的很耗时。

【问题讨论】:

    标签: scala apache-spark types


    【解决方案1】:

    1 - 排除前 5 列,查找所有随后的 BigInt/Long 类型的列

    2 - 折叠 BigInt 列列表,将它们更改为 Double

    val df2 = df.schema.drop(5).collect{case c if c.dataType == DataTypes.LongType => c.name}.foldLeft(df){(acc, nxt) => acc.withColumn(nxt, acc.col(nxt).cast(DataTypes.DoubleType))}
    

    【讨论】:

    • 抱歉我的菜鸟问题,但我在您的代码中没有看到类似BigInt 的内容?你是怎么做到的?
    • 没问题! BigInt 是 Hive 术语,Spark-SQL 等效项是 Long,因此是 DataTypes.LongType。两者都代表一个 64 位整数。
    猜你喜欢
    • 1970-01-01
    • 2021-06-23
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    相关资源
    最近更新 更多