scala - 如何使用 sparkSQL 或 Dataframe API 订购精确格式的字符串(dd-MM-yyyy HH:mm)
问题描述
我希望根据格式为“23-07-2018 16:01”的日期时间列按升序对数据框进行重新排序
我的程序按日期级别排序,但不是HH:mm标准。我希望输出包含 HH:mm 详细信息并根据它进行排序。
package com.spark
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.functions.{to_date, to_timestamp}
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
object conversion{
def main(args:Array[String]) = {
val spark = SparkSession.builder().master("local").appName("conversion").enableHiveSupport().getOrCreate()
import spark.implicits._
val sourceDF = spark.read.format("csv").option("header","true").option("inferSchema","true").load("D:\\2018_Sheet1.csv")
val modifiedDF = sourceDF.withColumn("CredetialEndDate",to_date($"CredetialEndDate","dd-MM-yyyy HH:mm"))
//This converts into "dd-MM-yyyy" but "dd-MM-yyyy HH:mm" is expected
//what is the equivalent Dataframe API to convert string to HH:mm ?
modifiedDF.createOrReplaceGlobalTempView("conversion")
val sortedDF = spark.sql("select * from global_temp.conversion order by CredetialEndDate ASC ").show(50)
//dd-MM-YYYY 23-07-2018 16:01
}
}
所以我的结果应该有格式为“ 23-07-2018 16:01 ”的列,而不仅仅是“ 23-07-2018 ”并且以升序方式排序。
解决方案
to_date 方法将列转换为只有日期,没有时间的 DateType。尝试使用 to_timestamp 代替。
编辑:如果您想进行排序但保留原始字符串表示,您可以执行以下操作:
val modifiedDF = sourceDF.withColumn("SortingColumn",to_timestamp($"CredetialEndDate","dd-MM-yyyy HH:mm"))
然后将结果修改为:
val sortedDF = spark.sql("select * from global_temp.conversion order by SortingColumnASC ").drop("SortingColumn").show(50)
推荐阅读
- html - CSS Head Nav 和下拉菜单对齐问题
- python - Python字典更改
- clickonce - ClickOnce 部署给出下载错误
- c++ - 将 std::bitset 存储到磁盘占用太多内存
- python - Python OS 打开程序立即关闭
- excel - Excel VBA在1行代码中隐藏了几列
- python - 高效的概率树分支
- asp.net - 在 asp.net WebForms 和 asp.net MVC5 中有一些默认的 DI 容器吗?
- java - 什么是 dart 等价于 kotlin 或 java 的 collection.removeall?
- sqlite - 如何将 Xamarin TimePicker 值保存到数据库?