Lambda表达式让Spark编程更容易
来源:互联网 发布:2017高考倒计时软件 编辑:程序博客网 时间:2024/05/05 18:47
近日,Databricks官方网站发表了一篇博文,用示例说明了lambda表达式如何让Spark编程更容易。文章开头即指出,Spark的主要目标之一是使编写大数据应用程序更容易。Spark的Scala和Python接口一直很简洁,但由于缺少函数表达式,Java API有些冗长。因此,随着Java 8增加了lambda表达式,他们更新了Spark的API。Spark 1.0将提供Java 8 lambda表达式支持,而且与Java的旧版本保持兼容。该版本将在5月初发布。
文中举了两个例子,用于说明Java 8如何使代码更简洁。第一个例子是使用Spark的filter和count算子在一个日志文件中查找包含“error”的行。这很容易实现,但在Java 7中需要向filter传递一个Function对象,这有些笨拙:
JavaRDD<String> lines = sc.textFile("hdfs://log.txt").filter( new Function<String, Boolean>() { public Boolean call(String s) { return s.contains("error"); }});long numErrors = lines.count();
在Java 8中,代码更为简洁:
JavaRDD<String> lines = sc.textFile("hdfs://log.txt") .filter(s -> s.contains("error"));long numErrors = lines.count();
当代码更长时,对比更明显。文中给出了第二个例子,读取一个文件,得出其中的单词数。在Java 7中,实现代码如下:
JavaRDD<String> lines = sc.textFile("hdfs://log.txt");//将每一行映射成多个单词JavaRDD<String> words = lines.flatMap( new FlatMapFunction<String, String>() { public Iterable<String> call(String line) { return Arrays.asList(line.split(" ")); }});// 将单词转换成(word, 1)对JavaPairRDD<String, Integer> ones = words.mapToPair( new PairFunction<String, String, Integer>() { public Tuple2<String, Integer> call(String w) { return new Tuple2<String, Integer>(w, 1); }});// 分组并按键值添加对以产生计数JavaPairRDD<String, Integer> counts = ones.reduceByKey( new Function2<Integer, Integer, Integer>() { public Integer call(Integer i1, Integer i2) { return i1 + i2; }});counts.saveAsTextFile("hdfs://counts.txt");
而在Java 8中,该程序只需要几行代码:
JavaRDD<String> lines = sc.textFile("hdfs://log.txt");JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")));JavaPairRDD<String, Integer> counts = words.mapToPair(w -> new Tuple2<String, Integer>(w, 1)) .reduceByKey((x, y) -> x + y);counts.saveAsTextFile("hdfs://counts.txt");
要了解更多关于Spark的信息,可以查看官方文档。Spark只需下载解压即可运行,而无须安装。
0 0
- Lambda表达式让Spark编程更容易
- Lambda表达式让Spark编程更容易
- Lambda表达式--让代码更简洁
- 让Duilib多线程编程更容易
- 让Duilib多线程编程更容易
- Spark/Java8 lambda表达式
- 让一切更容易点
- Spark 2.0技术预览:更容易、更快速、更智能
- Spark 2.0技术预览:更容易、更快速、更智能
- Spark 2.0技术预览:更容易、更快速、更智能
- SEO优化让网页更容易被搜到
- 文件立体化:让Log分析更容易
- Zoho Reports让数字营销更容易
- 容器: 让“基础设施即代码”更容易
- Curator:让ZooKeeper使用更容易
- AKKA让并发和容错更容易
- C# 编程中的Lambda表达式
- Lambda 表达式 C# 编程指南
- Android如何设置倚赖项目
- 三个经典故事告诉你:什么叫契约精神
- android平台arm指令学习和调试
- mysql和sqlserver存在就更新,不存在就插入的写法
- Java 自定义注解实现网络访问重试
- Lambda表达式让Spark编程更容易
- 待整理
- 基于Zlib实现的从ZIP文件中提取文件数据
- android make 文件中文件的拷贝
- 3.31函数和指针
- ddu 1010 Tempter of the Bone
- c调用python遇到的那些坑
- linux shell中 test 的用法
- 【转载】工厂模式