向Spark传递函数

Spark的大部分转化操作和一部分行动操作,都需要依赖用户传递的函数来计算。python、Scala、java向Spark传递函数的方式略有区别。

python、Scala向Spark传递函数的方式略。下面主要介绍Java向Spark传递函数的方法。

在Java中,函数需求作为实现了Spark的org.apache.spark.api.java.function包中的任一函数接口的对象来传递。一些常见的Java函数接口如下。

 

函数名

实现的方法

用途

1

Function<T, R>

R call(T)

接收一个输入值,并返回一个输出值,用于类似map()和filter等操作中。

2

Function2<T1, T2, R>

R call(T1, T2)

接收两个输入值并返回一个输出值,用于类似aggregate()和fold()等操作中。

3

FlatMapFunction<T, R>

Iterable<R> call(T)

接收一个输入值并返回任意个输出,用于类似flatMap()这样的操作中。

 

传递函数时,可以采用匿名内部类或具名内部类。

在Java中使用匿名内部类进行函数传递。

RDD<String> errors = lines.filter(new Function<String, Boolean>(){
		public Boolean call(String x){
    		return x.contains("error");
    }
});

在Java中使用具名内部类进行函数传递。

    class ContainsError implements Function<String, Boolean>{
        public Boolean call(String x){
            return x.contains("error");
        }
    }
    RDD<String> errors = lines.filter(new ContainsError());

使用具名内部类有一个好处,就是可以给具名内部类的构造函数添加参数。

(本文为《Spark快速大数据分析》的学习笔记)

发布了533 篇原创文章 · 获赞 212 · 访问量 69万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie

分享到微信朋友圈

×

扫一扫,手机浏览