2017-09-07 1 views
0

사용자 지정 방식으로 정렬해야하는 두 개의 열이 있습니다. 예를 들어Spark SQL의 사용자 지정 OrderBy

: 나는 분기로 열을 가지고 가정 Jan2015 또한

Dec(CurrentYear)에이 방법으로 정렬되어야한다 Month 열이 나는 또는 주문에 의해 원하는 Q1-2015, Q2-2015로 ... Q4-CurrentYear을 ..

나는 spark Sql의 주문으로 orderBy("Month","Quarter")으로 주겠지 만 주문은 이전과 마찬가지로 맞춤 주문이어야합니다.

나는 코드 아래 시도 :

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, ...하지만 요구 사항은 난 그냥 날짜 구문 분석하는 것

SAMPLE

답변

2

위에서 언급한다 :

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| 
+-----+-------+ 
관련 문제