之前在spark1.6中執行的**,放在了spark2上去執行,發現執行的結果不一致,定位後發現是不同版本中,hash函式的實現方式不同,導致取數結果不同。區別為:spark1.6 版本為hashcode,2.x版本為murmurhash。
如果在spark2上執行spark1編寫的**,需要重新定義hashcode,具體如下:
hivecontext.udf.
register
("hashcode"
,(x: string)
=> x.
hashcode()
.tostring)
從而可以使得spark1.6中的
hash
(number)
與spark2.0中的
hashcode(number)
取數結果相同。即在spark2中定義了hashcode之後,原本的sql中的hash要改為hashcode、 Spark自定義排序
在這之前,我們先準備一些資料,使用rdd存放 獲得sparkcontext val conf sparkconf newsparkconf setmaster local 2 val sc newsparkcontext conf val rdd sc.parallelize list 公尺家雷射投...
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...