三种方法:
- 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.youkuaiyun.com/qq_15230053/article/details/84769767
- 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()
- 通过:_*
上面这个方法效率比较低,
val cols = colNames.map(f => col(f).cast(DoubleType))
df.select(cols: _*).show()
结果:
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()
本文转载于董可伦, 发表于 伦少的博客
原文链接:https://dongkelun.com/2018/04/27/dfChangeAllColDatatypes/
强烈推荐这个博主,好多遇到的问题都有记录,讲解例子搭配,清晰明了。