有如下的資料,我們需要對其進行排序,欄位的意思分別為:商品,**,數量
val rdd = sc.
parallelize
(list
("iphone5 1000 20"
,"iphone6 2000 50"
,"iphone7 2000 100"
,"iphone11 5000 50"
))
需求:把商品按照**公升序
import org.apache.spark.
//匯入的
import com.bigdata.spark.utils.implicitaspect._
def main
(args: array[string]
): unit =).
sortby
(x=>
(x._2)
)//排序規則
//列印資料
product.
printinfo()
sc.stop()
}}
結果如下:
上面printinfo
方法,是對rdd進行了增強的方法,**如下:
object implicitaspect
class
richrdd
[t](rdd: rdd[t])}
}
使用自定義類的時候注意下面三點:
繼承ordered類,重寫compare方法
序列化重寫tostring(可選,主要為了可以展示資料)
import com.bigdata.spark.utils.implicitaspect._
import org.apache.spark.
def main
(args: array[string]
): unit =).
sortby
(x =
> x)
//列印資訊
product.
printinfo()
sc.stop()
}}class
productinfov1
(val name: string, val price: double, val amount: int)
extends
ordered
[productinfov1] with serializable
//重寫tostring方法
override def tostring: string =
}
結果為:
推薦使用case class的原因,主要是因為
1.自動序列化
2.自動重寫了tostring
3.不需要new
import com.bigdata.spark.utils.implicitaspect._
import org.apache.spark.
def main
(args: array[string]
): unit =).
sortby
(x =
> x)
//列印資訊
product.
printinfo()
sc.stop()
}}case
class
productinfov2
(val name: string, val price: double, val amount: int)
extends
ordered
[productinfov2]
}
結果為:
存在下面這個類,不允許修改此類,對此類進行增強
case
class
productinfov2
(val name: string, val price: double, val amount: int)
可以通過隱式轉換對此類進行增強
def main
(args: array[string]
): unit =
} val product = rdd.
map(x =
>).
sortby
(x =
> x)
//列印資訊
product.
printinfo()
sc.stop()
}}結果:
需求:現在比方說要按照**公升序,如果**相同,按照數量降序
implicit on的公式如下:
implicit val ord = ordering[排序規則資料型別].on[資料的型別](x => 排序規則)
import com.bigdata.spark.utils.implicitaspect._
def main
(args: array[string]
): unit =
)/*** *
* x._2, -x._3排序規則
* (double, int)定義的是規矩的返回值型別
* (string, double, int) 資料的型別
*/implicit val ord = ordering[
(double, int)
].on[
(string, double, int)
](x =
>
(x._2,
-x._3)
) product.
sortby
(x =
> x)
.printinfo()
sc.stop()
}}
結果為:
Spark排序方式之Ordering on
一 spark的幾種排序方式 1 直接根據字段進行排序 弊端 如果欄位太多不便於使用 2 封裝乙個類,實現它的ordered 弊端 用自定義實現序列化方式比較麻煩 3 用case class的方式排序 推薦 不用new 預設就實現了序列化 4 最簡單的排序方式ordering on 二 spark最...
經典的幾種排序方式
所謂排序就是整理檔案中的記錄,使之按關鍵字遞增 或遞減 次序排列起來。穩定排序與不穩定排序 假設 ki kj 且排序前序列中 ri 領先於 rj 若在排序後的序列中 ri 仍領先於 rj 則稱排序方法是穩定的。若在排序後的序列中 rj 仍領先於 ri 則稱排序方法是不穩定的。例 序列 3 15 8 ...
Hive的幾種排序方式
記錄hive的幾種常見的排序方式 order by 普通排序,通過order對欄位進行降序或者公升序 select from emp order by sal sort by 對每乙個reduce的結果進行排序,為了看出效果,我們多設定幾個reduce,檢視每個reduce的結果是否是排序的。set...