1. 程式人生 > >Spark程式設計指南之二:向Spark運算元傳遞函式

Spark程式設計指南之二:向Spark運算元傳遞函式

文章目錄


接上一篇文章,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")
  }