写点什么

Lambda 表达式让 Spark 编程更容易

  • 2014-04-16
  • 本文字数:1224 字

    阅读完需:约 4 分钟

近日,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 只需下载解压即可运行,而无须安装。


感谢辛湜对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-04-16 00:309386
用户头像

发布了 256 篇内容, 共 87.6 次阅读, 收获喜欢 12 次。

关注

评论

发布
暂无评论
发现更多内容

GPT-4V新玩法登顶GitHub热榜,随手一画就能生成网页!web开发者:感受到了威胁

Openlab_cosmoplat

低代码是“银弹”,还是“毒弹”?

高端章鱼哥

低代码

云端力量:探索亚马逊云服务器,提升您的业务无限可能

熬夜磕代码、

亚马逊

探索当代AI人工智能云服务技术的强者

不在线第一只蜗牛

AI 亚马逊云 AWS Lightsail 云服务 微软云

赛事数据,体育直播源码:开发搭建全新体育直播娱乐平台

软件开发-梦幻运营部

桌面云一体机如何安装应用软件?

青椒云云电脑

桌面云一体机

“低代码”是什么?

代码生成器研究

FFA 2023|第六届 Flink Forward Asia 峰会议程正式上线!

Apache Flink

大数据 flink 实时计算

业务流程图用什么软件画?这10款流程图软件,效率快到飞起!

彭宏豪95

流程图 画图软件 在线白板 流程图绘制工具 绘图软件

开发者工具|15款音视频开发者必备实用工具,看看你用过几个?

音视频开发_AIZ

音视频开发 工具集 音视频技术

低代码平台或零代码平台靠谱吗?

代码生成器研究

「Flink+Hologres 搭建实时数仓」训练营重磅开启

Apache Flink

大数据 flink 实时计算

如何使用 NFTScan NFT API 在 Linea 网络上开发 Web3 应用

NFT Research

NFT\ NFTScan API 文档

当代企业的数字安全,能“脆皮”到什么程度?

脑极体

AI

探索计算机视觉技术的应用前景

EquatorCoco

计算机视觉 视觉开发 计算机科学与技术

用低代码平台开发应用

互联网工科生

软件开发 低代码 JNPF

云计算自动化测试系统环境自动识别实现方案

lklmyy

云计算 自动化测试 pytest

低代码开发前景如何,大家都真的看好低代码开发么?

代码生成器研究

虚拟化有哪些好处?为什么要使用虚拟云桌面?

青椒云云电脑

桌面云 云桌面

亚马逊云EC2的存储

孤虹

Amazon EC2 亚马逊云

蓝牙耳机仓设计的单芯片解决方案

芯动大师

APP安全加固怎么做?加固技术、加固方法、加固方案

随着大模型中数据局限问题的严峻化,向量数据库应运而生

苏沐

数据 向量 向量数据库 亚马逊大模型

低代码开发到底有什么价值?

代码生成器研究

OpenAI 正在杀死创业公司?他们是这么回答的...

代码生成器研究

低代码和无代码有什么不同?

代码生成器研究

基于ChatGPT自动化测试项目生成方案

lklmyy

测试框架 AIGC

SQL 查询优化指南:SELECT、SELECT DISTINCT、WHERE 和 ORDER BY 详解

小万哥

MySQL 数据库 sql 程序员 后端

鲜衣怒马少年时|GreptimeDB 开源一周年回顾

Greptime 格睿科技

数据库 开源 基础软件 时序数据库

低代码的优势体现在哪里?

代码生成器研究

aPaaS 低代码平台的模式是什么?

代码生成器研究

Lambda表达式让Spark编程更容易_语言 & 开发_马德奎_InfoQ精选文章