spark 简单算子学习

foreach,遍历每一行数据,
map,一行数据执行一次,通过回调函数返回一个对象,public Object call(String arg0) throws Exception {
flatMap,一行数据执行一次,通过回调函数返回一个或者多个对象, public Iterable<Object> call(String arg0) throws Exception
mapToPair,一行数据执行一次,通过回调函数返回一个键值对,public Tuple2<K2, V2> call(String arg0) throws Exception 
flatMapToPair,一行数据执行一次,通过回调函数返回一个或者多个键值对,public Iterable<Tuple2<K2, V2>> call(String arg0) throws Exception
can not return null, in anyway, otherwise the result RDD will be null.
flat 可以将一行拆成多行
mapPartitions, map的输入是RDD的每一个元素,大多数情况可以认为是每一行数据,mapPartitions的输入是RDD的每一个分区,以Iterable<>的形式做为输入
filter方法 过滤之后生产一个新的RDD,回调函数返回boolean
aggregateByKey返回值的类型不需要和RDD中value的类型一致,


对于group by 然后取最大最小或者平均值类型的需求,可以先Rdd.groupByKey()获得一个JavaPairRDD<String, Iterable<String>>,然后rdd.mapToPair
public Tuple2<String, Integer> call(Tuple2<String, Iterable<String>> arg0) throws Exception 对Iterable<String>进行计算。


reduceByKey的回调方法:public Record call(Record arg0, Record arg1) throws Exception {
return record;
}
该方法第一次执行时,arg0和arg1分别是第一个和第二个记录,后面每次执行arg0是上一次执行的返回值,arg1是下一条未处理数据。

如果是取最大值最小值,可以以第一个Record为Buffer,如果是取平均数等,可以在Record对象中加入一些字段来实现业务。


aggregate
聚合,没有key,
第一个回调类,new Function2<ZeroValueBuffer, Record, ZeroValueBuffer>()
其中回调方法 public ZeroValueBuffer call(ZeroValueBuffer arg0, Record record) 
第一个参数在第一次调用时会有一个默认值(即aggregate方法传入的第一个参数值),从第二次开始,都是方法的返回值。第二个参数是每一条记录。
第二个回调类,new Function2<ZeroValueBuffer, ZeroValueBuffer, ZeroValueBuffer>() 
其中回调方法 public ZeroValueBuffer call(ZeroValueBuffer arg0, Record record) 
该方法只被调用了一次【setMaster("local")】,第一个参数即aggregate方法传入的第一个参数值,第二个参数是第一个回调类回调方法的返回值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值