spark udf 初識初用

2022-03-04 14:28:25 字數 2668 閱讀 6899

直接上**,詳見注釋

import

org.apache.spark.sql.hive.hivecontext

import

org.apache.spark.

/** * created by zxh on 2016/6/10.

*/object udf_test

//註冊函式體到當前sqlcontext,注意,註冊到sqlcontext的函式體,引數不能為column

//註冊後,可以在以下地方使用:1、df.selectexpr 2、df.filter ,3、將該df註冊為temptable,之後在sql中使用

sqlcontext.udf.register(

"filter_length

", filter_length_f)

val filter_length = udf(filter_length_f) //為方便使用column,我們對函式體進行包裝,包裝後的輸入引數為column

data.select($"*

", filter_length($"

a", lit(2))).show //使用udf包裝過的,必須傳入column,注意 lit(2)

data.selectexpr("*

", "

filter_length(a,2) as ax

").show //select 若寫表示式呼叫函式,則需要使用selectexpr

data.filter(filter_length($"a

", lit(2))).show //同select

data.filter(

"filter_length(a,2)

").show //filter呼叫表示式,可以直接使用df.filter函式,

sqlcontext.sql(

"select *,filter_length(a,2) from data

").show

sqlcontext.sql(

"select *,filter_length(a,2) from data where filter_length(a,2)

").show

}sqlcontext.udf.register(

"filter_length

", filter_length_f2) //todo:不好意思,這裡註冊不了,註冊到sqlcontext.udf的函式,入參不支援column型別

data.select($"*

", filter_length_f2($"

a", 2)).show //不用udf包裝,我們就可以完全自定義,這時 length 就可以傳入整型了

data.selectexpr("*

", "

filter_length_f2(a,2) as ax

").show //todo:不好意思,這裡用不了了,

data.filter(filter_length_f2($"a

", 2)).show //同select

data.filter(

"filter_length(a,2)

").show //todo:不好意思,這裡用不了了

}//最後,我們寫乙個相對通用的吧

//主函式,下面df.select df.filter 等中使用

val filter_length = (str: column, _length: int) =>

//註冊函式體到當前sqlcontext,注意,註冊到sqlcontext的函式體,引數不能為column

//註冊後,可以在以下地方使用:1、df.selectexpr 2、df.filter ,3、將該df註冊為temptable,之後在sql中使用

sqlcontext.udf.register(

"filter_length

", filter_length_f)

//這裡我們不使用udf了,直接使用自己定義的支援column的函式

//val filter_length = udf(filter_length_f) //為方便使用column,我們對函式體進行包裝,包裝後的輸入引數為column

data.select($"*

", filter_length($"

a", 2)).show //使用udf包裝過的,必須傳入column,注意 lit(2)

data.selectexpr("*

", "

filter_length(a,2) as ax

").show //select 若寫表示式呼叫函式,則需要使用selectexpr

data.filter(filter_length($"a

", 2)).show //同select

data.filter(

"filter_length(a,2)

").show //filter呼叫表示式,可以直接使用df.filter函式,

sqlcontext.sql(

"select *,filter_length(a,2) from data

").show

sqlcontext.sql(

"select *,filter_length(a,2) from data where filter_length(a,2)

").show

}}}

初用coap總結

coap 是在udp上的代替了 在tcp上的http,由於在http協議太大,coap協議卻很小的,所以很適合嵌入式開發的環境,同樣對比的還有mqtt協議在這裡不講解。首先在ubuntu下操作如下 2.sudo apt get install autoconf 3.autoconf 4.make m...

初用Empire體驗

git clone cd empire setup install.sh 安裝後,在其目錄執行.empire 檔案即可,開啟後如下圖 empire 包含三個部分,乙個是modules即自身的一些模組,乙個是listernes即監聽類似msf的exploit multi handler模組,乙個是ag...

GenSample演算法初讀 遺傳演算法初識

之前對於遺傳演算法的學習有些囫圇吞棗,知道大致思想是自然選擇 優勝劣汰,通過大自然一代又一代的選擇將適合的基因和物種逐漸保留下來,但是中間過程是如何實現的卻並不清楚。這次有緣讀了加利福尼亞大學幾位老師寫的關於在不平衡資料集上進行過取樣相關的 他們巧妙地將遺傳演算法用於過取樣的過程中,生成了一種新取樣...