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|
+--------+-----------+----------+