(转载)Spark sql的改变表中数据类型

三种方法:

  1. df.select(col(“xxx”).cast(DateType)) 进行单列转换
    dateFrame默认所有数据都默认为String

其他数据类型包括:

    数字类型
        ByteType:代表一个字节的整数。范围是-128到127
        ShortType:代表两个字节的整数。范围是-32768到32767
        IntegerType:代表4个字节的整数。范围是-2147483648到2147483647
        LongType:代表8个字节的整数。范围是-9223372036854775808到9223372036854775807
        FloatType:代表4字节的单精度浮点数
        DoubleType:代表8字节的双精度浮点数
        DecimalType:代表任意精度的10进制数据。通过内部的java.math.BigDecimal支持。BigDecimal由一个任意精度的整型非标度值和一个32位整数组成
        StringType:代表一个字符串值
        BinaryType:代表一个byte序列值
        BooleanType:代表boolean值
        Datetime类型
            TimestampType:代表包含字段年,月,日,时,分,秒的值
            DateType:代表包含字段年,月,日的值

参考整理链接:https://blog.csdn.net/qq_15230053/article/details/84769767
  1. withColumn循环
import org.apache.spark.sql.types._
val data = Array(("1", "2", "3", "4", "5"), ("6", "7", "8", "9", "10"))
val df = spark.createDataFrame(data).toDF("col1", "col2", "col3", "col4", "col5")
val colNames = df.columns

var df1 = df
for (colName <- colNames) {
  df1 = df1.withColumn(colName, col(colName).cast(DoubleType))
}
df1.show()
  1. 通过:_*
    上面这个方法效率比较低,
val cols = colNames.map(f => col(f).cast(DoubleType))
df.select(cols: _*).show()

结果:
(转载)Spark sql的改变表中数据类型_第1张图片

val name = "col1,col3,col5"
df.select(name.split(",").map(name => col(name)): _*).show()
df.select(name.split(",").map(name => col(name).cast(DoubleType)): _*).show()

(转载)Spark sql的改变表中数据类型_第2张图片本文转载于董可伦, 发表于 伦少的博客

原文链接:https://dongkelun.com/2018/04/27/dfChangeAllColDatatypes/

强烈推荐这个博主,好多遇到的问题都有记录,讲解例子搭配,清晰明了。

你可能感兴趣的:(Spark,SQL)