scala - Spark DataFrame 根据列条件更改数据类型

标签 scala apache-spark apache-spark-sql

我有一个大约 1000 列的 Spark DataFrame df1,都是 String 类型的列。现在我想根据列名的条件将 df1 的列类型从字符串转换为其他类型,如 double、int 等。例如让我们假设 df1 只有三列字符串类型

df1.printSchema

col1_term1: String
col2_term2: String 
col3_term3: String

更改列类型的条件是,如果列名包含 term1,则将其更改为 int,如果列名包含 term2,则将其更改为 double,依此类推。我是 Spark 的新手。

最佳答案

您可以简单地映射列,并根据列名将列转换为正确的数据类型:

import org.apache.spark.sql.types._

val df = Seq(("1", "2", "3"), ("2", "3", "4")).toDF("col1_term1", "col2_term2", "col3_term3")

val cols = df.columns.map(x => {
    if (x.contains("term1")) col(x).cast(IntegerType) 
    else if (x.contains("term2")) col(x).cast(DoubleType) 
    else col(x)
})

df.select(cols: _*).printSchema
root
 |-- col1_term1: integer (nullable = true)
 |-- col2_term2: double (nullable = true)
 |-- col3_term3: string (nullable = true)

关于scala - Spark DataFrame 根据列条件更改数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47578823/

相关文章:

scala - 给定某种路径相关类型的值,如何获取 "container"的实例?

scala - 在 Spark SQL 中将多个小表与一个大表连接起来的最佳方法

python - PySpark 根据名称将列表分解为多列

apache-spark - 如何在Spark SQL中为表添加增量列ID

scala - Scala 中的 future 返回类型

作为函数结果的具有多种类型的 Scala 类型参数

apache-spark - Spark 流式微批处理

apache-spark - pyspark数据框添加一列(如果不存在)

Scala 变量参数 :_*

scala - 为什么 word2vec 只在 Word2Vec.scala :323 处为 mapPartitionsWithIndex 执行一项任务