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也可以自动推断返回值类型

猜你喜欢

转载自blog.csdn.net/fengfengchen95/article/details/84652090