scala - 在 Scala 中转换所有数据框列的有效方法

标签 scala apache-spark apache-spark-sql

我正在尝试根据如下所示的输入对所有数据框列进行类型转换,如何使用转换所有数据框列的单个命令来执行此操作?以下代码工作正常,但我需要一个适用于任何数据帧的通用命令。预先感谢您的好意建议。

    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/

相关文章:

scala - 使用spark将数据写入cassandra

scala - 什么是 Spark 流中的饥饿场景?

java - Spark Java - 合并同一列多行

scala - 在范围内找不到 Spark 隐式编码器

scala - 连接字符串列表

scala - 为什么 Spark 应用程序以 "ClassNotFoundException: Failed to find data source: jdbc"作为带有 sbt 程序集的 uber-jar 失败?

python - 如何通过多值列过滤JSON数据

scala - Spark SQL - 嵌套数组条件选择

scala - toArray 的值不是 org.apache.spark.rdd.RDD[(String, Int)] 的成员

scala - "no global type inference"对 Scala 意味着什么?