[英]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.