Spark自定義排序

2021-10-04 22:26:33 字數 1599 閱讀 3237

在這之前,我們先準備一些資料,使用rdd存放

//獲得sparkcontext

val conf: sparkconf =

newsparkconf()

.setmaster

("local[2]").

()val sc =

newsparkcontext

(conf)

val rdd = sc.

parallelize

(list

("公尺家雷射投影電視4k套裝 17999 1000"

,"小公尺充電寶 200 10"

,"小公尺雲台監控 200 1000"

,"公尺兔 9 2000"),

1)

第一種方法,通過rdd.map將資料返回成元組的方式,最後附上乙個sortby運算元就能實現

我們需要實現根據price進行降序,如果price一樣那麼通過storm進行公升序

rdd.

map(x =

>).

sortby

( x=

>

(-x._2,x._3)).

foreach

(println)

自定義乙個case class

首先需要繼承ordered(排序規則),然後需要繼承serializable(序列化)

case

class

produce

(name:string,price:int,storm:int)

extends

ordered

[produce] with serializable

}

直接使用rdd.map組成乙個class,然後使用sortby排序

rdd.

map(x =

>).

sortby

(x=>x)

.foreach

(println)

這邊我們只需要定義乙個普通的case class,繼承乙個serializable就行了

case

class

produce

(name:string,price:int,storm:int)

extends

serializable

使用隱式轉換進行增強,增強乙個ordered

//將rdd內轉化成produce

val value: rdd[produce]

= rdd.

map(x =

>

)//隱式轉換

implicit def produce2

(produce:produce)

: ordered[produce]

=new

ordered

[produce]

} 直接使用sortby並列印

value.

sortby

(x=>x)

.foreach

(println)

Spark自定義排序

spark支援我們自定義,只需要繼承相應的類就可以了,我在下面準備了乙個用身高和年齡做二次排序的例子,希望可以幫到大家 首先寫乙個排序類 名字 年齡 身高 class people val name string val age int,val hight int extends ordered p...

Spark 自定義排序

考察spark自定義排序 package com.rz.spark.base import org.apache.spark.rdd.rdd import org.apache.spark.自定義排序 object customsort1 不滿足要求 tp.3,false 將rdd裡面封裝在user...

spark兩種自定義排序方式

一 目標物件新增隱式轉換函式的方式實現自定義排序 object mysortelse 隱式轉換函式實現自定義排序 object customsort1 學生類 case class student name string,age int,score int 二 目標物件實現ordered特質的方式實...