scala使用一個需傳入自定義函式的方法操作攻略
個人感覺學習scala的難道在於匿名函式的是使用,比如拿到一個需要傳入自定義的函式的方式時,老拎不清如何寫自定義函式,先將自己的學習心得分享如下:
舉例說明:
對sparkStreaming Dstream中的資料進行處理:1.使用foreachRdd函式得到rdd, 2.使用rdd的foreachPartition函式處理rdd partion中的資料,將此資料存入資料庫
程式碼如下:
第一步建立Dstream
var message = createStream(ssc);
第二步使用foreachRdd遍歷Dstream中的rdd
當我們編寫message.foreachRdd()是IDEA自動提示我們需要傳入的自定義函式型別
1. foreachFunc:(RDD[(String,String)],Time)=>Unit
2.foreachFunc:RDD[(String,String)]=>Unit
上面的這個兩函式怎麼看呢,已2為例
foreachFunc就是相當於一個函式名這個名字自己可以任意取的 ,函式的型別RDD[(String,String)]=>Unit
所有我們自定義函式時可以使用如下兩種方式。
第一種:單獨寫自定義函式
def myfunct(myrdd:RDD[(String,String)]):Unit={
這裡面就是對myrdd進行詳細的操作
}
此時我們就可以呼叫自定義的函式
message.foreachRdd(myfunct _) 注意 “_” 代表foreachrdd中傳過來的當前rdd資訊,不懂的可以自己百度下
第二種方法:
不用單獨編寫自定義函式,自己在方法類操作
message.foreachRDD( a=>( 此次對a進行相關操作 ))
此方法a的資料型別就是RDD[(String,String)] ,Scala可以自動推動a的資料型別,所有此處就省略了資料型別
如果不省略就是這樣的
message.foreachRdd(a:RDD[(String,String)]=>(此處對a進行操作))
注意返回型別也沒寫,scala也可以自動推斷返回值型別