个人感觉学习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也可以自动推断返回值类型