Spark程式設計指南之二:向Spark運算元傳遞函式
阿新 • • 發佈:2018-12-23
文章目錄
接上一篇文章,SparkRDD運算元接收的都是函式,如filter、map、flatmap等都是接收的匿名函式。
向Spark運算元傳遞函式
Java的兩種方法
匿名內部類
如前一篇文章中
JavaRDD<String> filterRDD = textFileRDD.filter(new Function<String, Boolean>() {
@Override
public Boolean call(String s) throws Exception {
return s.contains("spark"); //返回帶有"spark"內容的行。
}
});
建立類實現Function介面
如果方法比較複雜,可以獨立建立類,這裡只做示例
public class LearnSpark {
public static void main(String[] args) {
SparkConf conf = new SparkConf().setAppName("LearnSpark").setMaster("local");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD textFileRDD = sc.textFile("in/README.md");
JavaRDD<String> filterRDD = textFileRDD. filter(new GetSpark());
System.out.println("包含spark的行數:"+ filterRDD.count());
}
static class GetSpark implements Function<String, Boolean> {
public Boolean call(String s) {
return s.contains("spark");
}
}
}
Scala的兩種方法
傳遞匿名函式
val filterRDD = textFileRDD.filter(line => line.contains("spark"))
定義全域性單例物件中的靜態方法
val filterRDD2 = textFileRDD.filter(GetSpark.fun1)
定義全域性單例物件中的靜態方法GetSpark.fun1
object GetSpark{
def fun1(s:String):Boolean = s.contains("spark")
}