首先提一下spark rdd的五大核心特性:

1、rdd由一系列的分片组成,比如说128m一片,类似于hadoop中的split
2、每一个分区都有一个函数去迭代/运行/计算
3、一系列的依赖,比如:rdda转换为rddb,rddb转换为rddc,那么rddc依赖于rddb,rddb依赖于rdda。
lineage:保存了一些列的转换
4、对于每个k-v的rdd可以指定一个partition,告诉它如何分区,常用分区规则有hash和range
5、处理rdd split的数据在哪里,尽量在哪里做计算(移动计算而非移动数据),这里选择最优位置,为什么存在选择,因为hdfs默认存储3个副本,每个副本都是一个选择。

RDD的两种创建方式:

parallelist

外部数据源

RDD的两种操作方式:

transformation:从一个RDD转化为另一个RDD

action:输出结果集

RDD依赖关系:

窄依赖(narrow dependencies):n——>1
子RDD的每个分区依赖于常数个父分区(即与数据规模无关)
输入输出一对一的算子,且结果RDD的分区结构不变,主要是map,flatmap
输入输出一对一,但结果集RDD的分区结构发生了变化,如union、coalesce
从输入中选择部分元素的算子,如filter、distinct、subtract、sample

宽依赖(wide dependencies):1——>n
子RDD的每个分区依赖于所有父RDD分区
对单个RDD基于key进行重组和reduce,如groupByKey、reduceByKey
对两个RDD基于key进行join和重组,如join

spark的shuffer过程类似于mapreduce shuffer过程。

创建spark应用模板:

1)创建SparkConf

2)创建SparkContact

3)加工逻辑

4)stop()关闭资源

---------------------------------------------------------------------------------------------------------------------

接下来通过wordcont程序熟悉一下:

检查需要分析的文本文件:

# bin/hdfs dfs -ls /user/hadoop/wordcount/input/
Found 1 items
-rw-r--r--   3 root supergroup         63 2017-05-22 14:48 /user/hadoop/wordcount/input/wc.input
[root@db02 hadoop-2.5.0]# bin/hdfs dfs -text /user/hadoop/wordcount/input/wc.input
hadoop hdfs mapreduce
zookeeper
spark hive hbase
spark hadoop

编辑scala程序实现wordcount功能:
1)读取文本文件
scala> val linesRdd = sc.textFile("hdfs://db02:8020/user/hadoop/wordcount/input/wc.input")
2)按空格切分文件
#scala> val wordRdd = linesRdd.map(line => line.split(" "))
scala> val wordRdd = linesRdd.flatMap(line => line.split(" "))
3)map函数统计单词
scala> val keyvalRdd = wordRdd.map(word => (word,1))
4)统计单词
scala> val countRdd = keyvalRdd.reduceByKey((a,b) => (a+b))
5)输出结果集
scala> countRdd.collect

6)将以上程序整合成一行scala程序,结果如下:
sc.textFile("hdfs://db02:8020/user/hadoop/wordcount/input/wc.input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).collect

7)spark默认输出结果是没有排序的,如果想要wordcount输出结果按照key排序可以使用sortByKey()函数:

升序:sc.textFile("hdfs://db02:8020/user/hadoop/wordcount/input/wc.input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).sortByKey(true).collect

降序:sc.textFile("hdfs://db02:8020/user/hadoop/wordcount/input/wc.input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).sortByKey(false).collect

8)如果想要输出结果按照value排序可以使用sortByKey的如下技巧:

sc.textFile("hdfs://db02:8020/user/hadoop/wordcount/input/wc.input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).map(x => (x._2,x._1)).sortByKey(false).map(x => (x._2,x._1)).collect

9)wordcount结果按值降序排序,可以使用take(n)函数输出前n个结果:

sc.textFile("hdfs://db02:8020/user/hadoop/wordcount/input/wc.input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).map(x => (x._2,x._1)).sortByKey(false).map(x => (x._2,x._1)).take(3)

spark运行wordcount程序的更多相关文章

  1. 编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本]

    编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本] 1. 开发环境 Jdk 1.7.0_72 Maven 3.2.1 Scala 2.10.6 Spark 1.6 ...

  2. (三)配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序

    配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序 一.   需求部分 在ubuntu上用Eclipse IDE进行hadoop相关的开发,需要在Eclip ...

  3. hadoop2.7.x运行wordcount程序卡住在INFO mapreduce.Job: Running job:job _1469603958907_0002

    一.抛出问题 Hadoop集群(全分布式)配置好后,运行wordcount程序测试,发现每次运行都会卡住在Running job处,然后程序就呈现出卡死的状态. wordcount运行命令:[hado ...

  4. 021_在Eclipse Indigo中安装插件hadoop-eclipse-plugin-1.2.1.jar,直接运行wordcount程序

    1.工具介绍 Eclipse Idigo.JDK1.7-32bit.hadoop1.2.1.hadoop-eclipse-plugin-1.2.1.jar(自己网上下载) 2.插件安装步骤 1)将ha ...

  5. [转] 用SBT编译Spark的WordCount程序

    问题导读: 1.什么是sbt? 2.sbt项目环境如何建立? 3.如何使用sbt编译打包scala? [sbt介绍 sbt是一个代码编译工具,是scala界的mvn,可以编译scala,java等,需 ...

  6. 用SBT编译Spark的WordCount程序

    问题导读: 1.什么是sbt? 2.sbt项目环境如何建立? 3.如何使用sbt编译打包scala? sbt介绍 sbt是一个代码编译工具,是scala界的mvn,可以编译scala,java等,需要 ...

  7. Eclipse环境搭建并且运行wordcount程序

    一.安装Hadoop插件 1. 所需环境  hadoop2.0伪分布式环境平台正常运行 所需压缩包:eclipse-jee-luna-SR2-linux-gtk-x86_64.tar.gz 在Linu ...

  8. 解决在windows的eclipse上面运行WordCount程序出现的一系列问题详解

    一.简介 要在Windows下的 Eclipse上调试Hadoop2代码,所以我们在windows下的Eclipse配置hadoop-eclipse-plugin- 2.6.0.jar插件,并在运行H ...

  9. 在Spark上运行WordCount程序

    1.编写程序代码如下: Wordcount.scala package Wordcount import org.apache.spark.SparkConf import org.apache.sp ...

随机推荐

  1. CSS3 选择器 基本选择器介绍

    CSS是一种用于屏幕上渲染html,xml等一种语言,CSS主要是在相应的元素中应用样式,来渲染相对应用的元素,那么这样我们选择相应的元素就很重要了,如何选择对应的元素,此时就需要我们所说的选择器.选 ...

  2. Django的AbstractUser的几大步骤

    - 导入 AbstractUser from django.contrib.auth.models import AbstractUser - 往其中添加列,即可在Django的基础上添加我们所需要的 ...

  3. 本地搭建Wooyun漏洞库环境

    众所周知,wooyun上有太多含金量的漏洞了,虽然互联网上也有相关的漏洞资源分享,但是万一有朝一日也被和谐了就又麻烦了,最放心的方式就是漏洞库放在本地,在本地搭建一套环境最好不过了,以下操作演示了如何 ...

  4. 9款最好的JavaScript压缩工具

    削减是一个从源代码中删除不必要的字符的技术使它看起来简单而整洁.这种技术也被称为代码压缩和最小化.在这里,我们为你收集了10个最好的JavaScript压缩工具将帮助您删除不必要的空格,换行符,评论, ...

  5. (转载)完成端口(Completion Port, I/OCP)详解

    http://www.cnblogs.com/lancidie/archive/2011/12/19/2293773.html 手把手叫你玩转网络编程系列之三    完成端口(Completion P ...

  6. Serializable接口

    Serializable这个接口起啥作用呢?? 这个接口没有提供任何方法,我们实现它有什么意义呢? Serializable接口是启用其序列化功能的接口.Serializable接口中没有任何方法,一 ...

  7. compass Errno::EACCES on line ["897"] of C: Permission denied

    具体原因不清楚,应该是与新版的sass有关. 目前的处理方法就是安装原来的版本 gem uninstall compass gem uninstall sass gem install sass –v ...

  8. iOS开发中的小技巧 - 多张图合成一张

    iOS多张图片合成一张 本文来源于http://www.cnblogs.com/yang-guang-girl/p/5197099.html,感谢博主 代码 #import "RootVie ...

  9. win7下安装Office2010老是出现提示安装MSXML6.10.1129.0,下载官方MSXML后提示安装成功却也安装不了

    在注册表中增加以下信息: [HKEY_CLASSES_ROOT\TypeLib\{F5078F18-C551-11D3-89B9-0000F81FE221}][HKEY_CLASSES_ROOT\Ty ...

  10. css文件的MIME错误引发的Jquery Mobile绘制错误

    静态文件serve设置的MIME不对,引起的浏览器警告 Resource interpreted as Stylesheet but transferred with MIME type applic ...