Spark

时间:2018-05-06 10:34:12

标签: java apache-spark generics

我学习Spark,掌握java的基本知识。

在我的第一个Spark程序中,我看到的代码如下:

JavaRDD<String> tweetsRDD = spContext.textFile("/home/andrea/Documents/SparkTest");
for (String s : tweetsRDD.take(5)) {
    System.out.println(s);
}           
System.out.println("Total tweets in file : " + tweetsRDD.count());
JavaRDD<String> ucRDD = tweetsRDD.map(str -> str.toUpperCase());

// Print upper case lines
for (String s : ucRDD.take(5)) {
    System.out.println(s);
}

我不明白str -> str.toUpperCase()在地图功能中的含义。

在谷歌搜索之后,我发现地图是在界面JavaRDDLike<T, This extends JavaRDDLike<T, This>>中声明的函数。

功能签名是:map(Function<T, R> f)

我是否应该知道Function<T, R>str -> str.toUpperCase()如何在地图功能中作为参数相互关联?

我无法理解此功能str -> str.toUpperCase()!看起来如何Function<T, R>

我的第二个问题是关于JavaRDDLike接口。我看到其中一个参数类型说This extends JavaRDDLike<T,This>?这是什么意思?它是否指向实现此接口的类?

1 个答案:

答案 0 :(得分:0)

表达式(str -> str.toUpperCase())称为 Lambda表达式

它们是用于实现由功能接口定义的方法的匿名方法(没有名称的方法)。函数接口只有一个抽象方法。

Lambda提供了对数据执行流水线操作的功能,还为您提供了多核处理的强大功能。

运算符->称为箭头运算符。它将lambda表达式分为两部分。

左侧指定表达式所需的参数,如果不需要参数,也可以为空。

n -> n*n

右侧是lambda主体,它指定lambda表达式的动作。将此运算符视为“变为”可能会有所帮助。例如,“n变为n * n”,或“n变为n平方”。

阅读文档中的更多内容

https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html