Scala 如何更新数据帧中列的所有值

Scala 如何更新数据帧中列的所有值,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我有一个数据框,它有一个未格式化的日期列: +--------+-----------+--------+ |CDOPEINT| bbbbbbbbbb| Date| +--------+-----------+--------+ | AAA|bbbbbbbbbbb|13190326| | AAA|bbbbbbbbbbb|10190309| | AAA|bbbbbbbbbbb|36190908| | AAA|bbbbbbbbbbb|07190214| |

我有一个数据框,它有一个未格式化的日期列:

+--------+-----------+--------+
|CDOPEINT| bbbbbbbbbb|    Date|
+--------+-----------+--------+
|     AAA|bbbbbbbbbbb|13190326|
|     AAA|bbbbbbbbbbb|10190309|
|     AAA|bbbbbbbbbbb|36190908|
|     AAA|bbbbbbbbbbb|07190214|
|     AAA|bbbbbbbbbbb|13190328|
|     AAA|bbbbbbbbbbb|23190608|
|     AAA|bbbbbbbbbbb|13190330|
|     AAA|bbbbbbbbbbb|26190630|
+--------+-----------+--------+
date列的格式为:wwyyMMdd(周、年、月、日),我想将其格式化为YYYYMMdd,为此,我有一个方法:格式化它。
所以我的问题是如何将列Date的所有值映射到所需的格式
以下是我想要的输出:

+--------+-----------+----------+
|CDOPEINT| bbbbbbbbbb|      Date|
+--------+-----------+----------+
|     AAA|bbbbbbbbbbb|2019/03/26|
|     AAA|bbbbbbbbbbb|2019/03/09|
|     AAA|bbbbbbbbbbb|2019/09/08|
|     AAA|bbbbbbbbbbb|2019/02/14|
|     AAA|bbbbbbbbbbb|2019/03/28|
|     AAA|bbbbbbbbbbb|2019/06/08|
|     AAA|bbbbbbbbbbb|2019/03/30|
|     AAA|bbbbbbbbbbb|2019/06/30|
+--------+-----------+----------+

如果日期包含2000年的值,并且原始数据框中的
date
列是整数类型,则可以尝试以下操作

def getDate=(日期:Int)=>{
val dateString=date.toString.drop(2).滑动(2,2)
dateString.zipWithIndex.map{
案例(值,索引)=>if(索引==0)20+值else值
}.mkString(“/”)
}
然后创建一个调用此函数的UDF

val updateDateUdf=udf(getDate)
如果originalDF是您拥有的原始数据帧,那么您可以像这样更改数据帧

val updatedf=originalDF.withColumn(“日期”),updatedatedateudf(col(“日期”))

如果日期包含2000年的值,并且原始数据框中的
日期
列是整数类型,则可以尝试以下操作

def getDate=(日期:Int)=>{
val dateString=date.toString.drop(2).滑动(2,2)
dateString.zipWithIndex.map{
案例(值,索引)=>if(索引==0)20+值else值
}.mkString(“/”)
}
然后创建一个调用此函数的UDF

val updateDateUdf=udf(getDate)
如果originalDF是您拥有的原始数据帧,那么您可以像这样更改数据帧

val updatedf=originalDF.withColumn(“日期”),updatedatedateudf(col(“日期”))
Spark 2.4.3使用unix_时间戳,您可以将数据转换为预期输出

如果您对此有任何疑问,请告诉我

Spark 2.4.3使用unix_时间戳,您可以将数据转换为预期输出


如果您有任何与此相关的查询,请告诉我。

它像CHAMR一样工作,它像CHAMR一样工作,
scala> var df2 =spark.createDataFrame(Seq(("AAA","bbbbbbbbbbb","13190326"),("AAA","bbbbbbbbbbb","10190309"),("AAA","bbbbbbbbbbb","36190908"),("AAA","bbbbbbbbbbb","07190214"),("AAA","bbbbbbbbbbb","13190328"),("AAA","bbbbbbbbbbb","23190608"),("AAA","bbbbbbbbbbb","13190330"),("AAA","bbbbbbbbbbb","26190630"))).toDF("CDOPEINT","bbbbbbbbbb","Date")

scala> df2.withColumn("Date",from_unixtime(unix_timestamp(substring(col("Date"),3,7),"yyMMdd"),"yyyy/MM/dd")).show
+--------+-----------+----------+
|CDOPEINT| bbbbbbbbbb|      Date|
+--------+-----------+----------+
|     AAA|bbbbbbbbbbb|2019/03/26|
|     AAA|bbbbbbbbbbb|2019/03/09|
|     AAA|bbbbbbbbbbb|2019/09/08|
|     AAA|bbbbbbbbbbb|2019/02/14|
|     AAA|bbbbbbbbbbb|2019/03/28|
|     AAA|bbbbbbbbbbb|2019/06/08|
|     AAA|bbbbbbbbbbb|2019/03/30|
|     AAA|bbbbbbbbbbb|2019/06/30|
+--------+-----------+----------+