繁体   English   中英

通过Spark SQL自定义OrderBy

[英]Custom OrderBy in Spark SQL

我有两列需要以自定义方式进行排序。

例如: Month列,其排序方式应为从Jan2015年1 Dec(CurrentYear)Dec(CurrentYear)

并且还假设我有“列”作为“季度”,我希望它按“ Q1-2015 ,“ Q2-2015 ,“ Q4-CurrentYear ..” Q4-CurrentYear

在Spark Sql的orderby中,我将给出orderBy("Month","Quarter")但Order应该像以前一样是Custom Sequence。

我试过下面的代码:

import org.apache.spark.sql.SaveMode 
import org.apache.spark.storage.StorageLevel
val vDF=spark.sql(""" select month,quarter from table group by month,quarter order by month,quarter """);
vDF.repartition(10).orderBy("Month","Quarter").write(results‌​.csv);

截至目前按字母顺序将月份定为4月,8月,12月 ....,按季度将季度定为Q1-2015,Q1-2016 .....,但上述要求是

样品

我只是解析日期:

import org.apache.spark.sql.functions._

val df = Seq(
  ("Jul", 2017"), ("May", "Q2-2017"),
  ("Jan", "Q1-2016"), ("Dec", "Q4-2016"), ("Aug", "Q1-2016")
 ).toDF("month", "quater")

df.orderBy(unix_timestamp(
  concat_ws(" ", col("month"), substring(col("quater"), 4, 6)), "MMM yyyy"
)).show()

+-----+-------+                                                                 
|month| quater|
+-----+-------+
|  Jan|Q1-2016|
|  Aug|Q1-2016|
|  Dec|Q4-2016|
|  May|Q2-2017|
|  Jul|Q3-2017|
+-----+-------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM