如何用Spark解决一些经典MapReduce问题?

Spark是一个Apache项目,它被标榜为“快如闪电的集群计算”。它拥有一个繁荣的开源社区,并且是目前最活跃的Apache项目。Spark提供了一个更快、更通用的数据处理平台。和Hadoop相比,Spark可以让你的程序在内存中运行时速度提升100倍,或者在磁盘上运行时速度提升10倍。同时spark也让传统的map reduce job开发变得更加简单快捷。本文将简单介绍几个经典hadoop的mr按理用spark实现,来让大家熟悉spark的开发。

最大值最小值

求最大值最小值一直是Hadoop的经典案例,我们用Spark来实现一下,借此感受一下spark中mr的思想和实现方式。话不多说直接上code:

预期结果:

max: 1001min: 2

思路和hadoop中的mr类似,设定一个key,value为需要求最大与最小值的集合,然后再groupBykey聚合在一起处理。第二个方法就更简单,性能也更好。

平均值问题

求每个key对应的平均值是常见的案例,在spark中处理类似问题常常会用到combineByKey这个函数,详细介绍请google一下用法,下面看代码:

我们让每个partiton先求出单个partition内各个key对应的所有整数的和 sum以及个数count,然后返回一个pair(sum, count)在shuffle后累加各个key对应的所有sum和count,再相除得到均值.

TopN问题

Top n问题同样也是hadoop种体现mr思想的经典案例,那么在spark中如何方便快捷的解决呢:

思路很简单,把数据groupBykey以后按key形成分组然后取每个分组最大的2个。预期结果:

以上简单介绍了一下hadoop中常见的3个案例在spark中的实现。如果读者们已经接触过或者写过一些hadoop的mapreduce job,那么会不会觉得在spark中写起来方便快捷很多呢。

本文作者:谭杨

来源:51CTO

时间: 2024-10-22 12:55:27

如何用Spark解决一些经典MapReduce问题?的相关文章

如何用spark Scala写pagerank?

问题描述 如何用spark Scala写pagerank? 目前自己在用spark Scala 来写PageRank,但是怎奈小弟不才,实在不知道该如何下手.网上搜到的也不明确.自己的问题集中于用什么写PageRank的代码,以及如何在Linux 加spark的环境下执行. 不知哪位大神能给不吝赐教,能附上图例就更棒了. 解决方案 博客在线这有个map-reduce的,东西应该类似,可以改一改参考链接 解决方案二: 谢谢您的回答,我仔细琢磨琢磨!! 解决方案三: spark的代码里面有pager

直方图-如何用动态规划解决平面上的n个点用k个矩形覆盖的最小面积?

问题描述 如何用动态规划解决平面上的n个点用k个矩形覆盖的最小面积? 假设有n个点,我们要用k个矩形去覆盖所用的点,然后这k个矩形的面积要尽可能小 1)矩形的底是在x轴上的(其实就是直方图) 2)矩形的面积可以为0(就是一条与x轴垂直的线) 3)矩形不能重叠(边线与顶点也都不能重合) 有人可以帮我一下吗?想了半天都没想出来怎么用动态规划解决这个问题 解决方案 将 n 个点的坐标排序(x 为主键) 任取一点将 n 个点分成 2 组 n1 和 n2,求出 2 个面积 m1 和 m2 从 n1 中取出

如何用MediaCapture解决二维码扫描问题

原文:如何用MediaCapture解决二维码扫描问题(有修改) 二维码扫描的实现,简单的来说可以分三步走:"成像"."截图"与"识别". UWP开发中,最常用的媒体工具非MediaCapture莫属了,下面就来简单介绍一下如何利用MediaCapture来实现扫描和截图并且利用Zxing识别二维码,以及会遇到的问题和需要注意的地方. 1. 初始化与成像 private async void InitMediaCaptureAsync() { /

计算机-请问这道题如何用伪代码解决

问题描述 请问这道题如何用伪代码解决 从键盘输入一串字符,遇到连续三个'?'字符时结束输入.统计其中字母(不区分大小写字母)的个数.数字字符的个数和其他字符的个数. 解决方案 char ch[100]; int i = 0; int a,b,c; a=b=c=0; while (true) { ch[i++] = getchar(); if (i >= 3 && (ch[i-3]=='?' && ch[i-2]=='?' && ch[i-1]=='?'

【Spark Summit East 2017】EasyMapReduce:利用Spark与Docker以MapReduce方式赋能大规模科学工具

本讲义出自Marco Cappucini在Spark Summit East 2017上的演讲,主要介绍了如何通过借助Spark和Docker在分布式数据集上使串行软件能够并行运行,瑞典的Uppsala大学开发了基于Spark的能够以MapReduce方式运行Docker容器的实用程序EasyMapReduce,分享了面对处理大型分布式数据集的挑战,EasyMapReduce是如何帮助实现科学研究的.

5个经典案例:教你如何用“长尾”解决电商库存

中介交易 SEO诊断 淘宝客 云主机 技术大厅 本土互联网市场出现了很多"去库存"思想即抓住行业长尾切入市场的灵敏企业,互联网世界盈利的关键不是头部的优越感,而是尾部的长度.图书电商.唯品会.余额宝以及网络自制剧,都是长尾模式的典型. 互联网发展至今,"长尾理论"已经被反复验证,悬舞认为这一理论是最具互联网思维特性的,在行业中可否找到那条值钱的尾巴往往是互联网世界盈利的王道. "长尾理论",简言之即摒弃流行聚焦后更大容量的市场,变"鸡肋

Spark 是否真的比 MapReduce 技高一筹

Apache 基金会下的 Spak 再次引爆了大数据的话题.带着比 Hadoop MapReduce 速度要快 100 倍的承诺以及更加灵活方便的 API,一些人认为这或许预示着 Hadoop MapReduce 的终结. 作为一个开源的数据处理框架,Spark 是如何做到如此迅速地处理数据的呢?秘密就在于它是运行在集群的内存上的,而且不受限于 MapReduce 的二阶段范式.这大大加快了重复访问同一数据的速度. Spark 既可以单独运行,也可以运行在 Hadoop YARN 上(注:Had

Spark:超越Hadoop MapReduce

和 Hadoop 一样,Spark 提供了一个 Map/Reduce API(分布式计算)和分布式存储.二者主要的不同点是,Spark 在集群的内存中保存数据,而 Hadoop 在集群的磁盘中存储数据. 大数据对一些数据科学团队来说是 主要的挑战,因为在要求的可扩展性方面单机没有能力和容量来运行大规模数据处 理.此外,即使专为大数据设计的系统,如 Hadoop,由于一些数据的属性问题也很难有效地处理图数据,我们将在本章的其他部分看到这方面的内容. Apache Spark 与 Hadoop 类似

如何用!important解决浏览器兼容性问题

"!important"是什么? 第一个,是设置样式的优先级,设了!important的样式的属性优先于id选择器和class选择器.,比如id为"Main"的div在它的Class设背景色为红色,,id选择器下又设了背景色为蓝色,照css的"就近原则",它的背景色应该是红色了,因为id选择器的优先级高于class选择器,但是,一旦class里设了"!important",哈哈,id,一边去吧..我背景颜色要优先显示class