我学习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>
?这是什么意思?它是否指向实现此接口的类?
答案 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