我有一个大约 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/