1. 程式人生 > >scala使用一個需傳入自定義函式的方法操作攻略

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也可以自動推斷返回值型別