实现思路

实现1: scala 基本集合操作方式获取结果

package com.lzw.bigdata.spark.core.wordcount

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext} object Spark01_WordCount {
def main(args: Array[String]): Unit = {
// Spark框架步骤
// 1. 建立和Spark框架的链接
val sparkConfig: SparkConf = new SparkConf()
.setMaster("local")
.setAppName("WordCount")
val ctx = new SparkContext(sparkConfig) // 2. 执行业务逻辑
// 2.1 读取文件,获取一行一行的数据
val lines: RDD[String] = ctx.textFile("data")
lines.foreach(println) // 2.2 分词,此处按照空格spilt
val words: RDD[String] = lines.flatMap(line => line.split(" "))
words.foreach(println) val wordGroup: RDD[(String, Iterable[String])] = words.groupBy(word => word) val x = 1 // 2.3 将数据根据单词进行分组,便于统计
val wordToCount: RDD[(String, Int)] = wordGroup.map({
case (word, list) => (word, list.size)
}) val tuples: Array[(String, Int)] = wordToCount.collect() // 2.4 打印结果
tuples.foreach(println) // 3. 关闭连接
ctx.stop()
}
}

实现2: scala map reduce方式获取结果

package com.lzw.bigdata.spark.core.wordcount

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext} object Spark02_WordCount {
def main(args: Array[String]): Unit = {
// Spark框架步骤
// 1. 建立和Spark框架的链接
val sparkConfig: SparkConf = new SparkConf()
.setMaster("local")
.setAppName("WordCount")
val ctx = new SparkContext(sparkConfig) // 2. 执行业务逻辑
// 2.1 读取文件,获取一行一行的数据
val lines: RDD[String] = ctx.textFile("data")
// lines.foreach(println) // 2.2 分词,此处按照空格spilt
val words: RDD[String] = lines.flatMap(line => line.split(" "))
val wordToOne: RDD[(String, Int)] = words.map(word => (word, 1)) // 分组
val wordGroup: RDD[(String, Iterable[(String, Int)])] = wordToOne.groupBy(t => t._1) // 聚合
val tuple: RDD[(String, Int)] = wordGroup.map({
case (word, list) => list.reduce((t1, t2) => (t1._1, t1._2 + t2._2))
}) tuple.foreach(println) // 3. 关闭连接
ctx.stop()
}
}

实现3: spark 提供的map reduce方式获取结果

package com.lzw.bigdata.spark.core.wordcount

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext} object Spark03_WordCount {
def main(args: Array[String]): Unit = {
// Spark框架步骤
// 1. 建立和Spark框架的链接
val sparkConfig: SparkConf = new SparkConf()
.setMaster("local")
.setAppName("WordCount")
val ctx = new SparkContext(sparkConfig) // 2. 执行业务逻辑
// 2.1 读取文件,获取一行一行的数据
val lines: RDD[String] = ctx.textFile("data")
// lines.foreach(println) // 2.2 分词,此处按照空格spilt
val words: RDD[String] = lines.flatMap(line => line.split(" ")) val wordToOne: RDD[(String, Int)] = words.map(word => (word, 1)) // Spark框架提供了更多的功能,可以将分组和聚合使用一个方法实现
// 相同的key会对value做reduce
val tuple: RDD[(String, Int)] = wordToOne.reduceByKey((t1, t2) => t1 + t2)
tuple.foreach(println) // 3. 关闭连接
ctx.stop()
}
}

FAQ:

Q: 初步运行spark错误

A: JDK版本问题, 切换jdk到1.8就可以了

spark (二) spark wordCount示例的更多相关文章

  1. hadoop学习第三天-MapReduce介绍&&WordCount示例&&倒排索引示例

    一.MapReduce介绍 (最好以下面的两个示例来理解原理) 1. MapReduce的基本思想 Map-reduce的思想就是“分而治之” Map Mapper负责“分”,即把复杂的任务分解为若干 ...

  2. Spark练习之wordcount,基于排序机制的wordcount

    Spark练习之wordcount 一.原理及其剖析 二.pom.xml 三.使用Java进行spark的wordcount练习 四.使用scala进行spark的wordcount练习 五.基于排序 ...

  3. Spark metrics on wordcount example

    I read the section Metrics on spark website. I wish to try it on the wordcount example, I can't make ...

  4. openfire spark 二次 开发 服务插件

    ====================  废话 begin   ============================ 最近老大让我为研发平台增加即时通讯功能.告诉我用comet 在web端实现即 ...

  5. PC结束 Spark 二次开发 收到自己主动,并允许好友请求

    本次Spark二次开发是为了客服模块的开发, 能让用户一旦点击该客服则直接自己主动加入好友.而客服放则需自己主动加入好友,不同弹出对话框进行允许,这方便的广大客服. 如今废话不多说,直接上代码. pa ...

  6. Spark:使用Spark Shell的两个示例

    Spark:使用Spark Shell的两个示例 Python 行数统计 ** 注意: **使用的是Hadoop的HDFS作为持久层,需要先配置Hadoop 命令行代码 # pyspark >& ...

  7. Spark初步 从wordcount开始

    Spark初步-从wordcount开始 spark中自带的example,有一个wordcount例子,我们逐步分析wordcount代码,开始我们的spark之旅. 准备工作 把README.md ...

  8. 运行spark官方的graphx 示例 ComprehensiveExample.scala报错解决

    运行spark官方的graphx 示例 ComprehensiveExample.scala报错解决 在Idea中,直接运行ComprehensiveExample.scala,报需要指定master ...

  9. Spark安装和简单示例

    spark的安装 先到官网下载安装包 注意第二项要选择和自己hadoop版本相匹配的spark版本,然后在第4项点击下载.若无图形界面,可用windows系统下载完成后传送到centos中. 本例中安 ...

  10. 配置spark历史服务(spark二)

    1. 编辑spark-defaults.conf位置文件 添加spark.eventLog.enabled和spark.eventLog.dir的配置修改spark.eventLog.dir为我们之前 ...

随机推荐

  1. vi指令总结

    VI常用技巧 ​ VI命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,但是因为它的命令集众多,很多人都不习惯使用它,其实您只需要掌握基本命令,然后加以灵活运用,就会发现它的优势,并会逐 ...

  2. Solon 之 STOMP

    一.STOMP 简介 如果直接使用 WebSocket 会非常累,就像用 Socket 编写 Web 应用.没有高层级的交互协议,就需要我们定义应用间所发消息的语义,还需要确保连接的两端都能遵循这些语 ...

  3. C语言之常量

    常量 常量,常量表达式和const关键字修饰的只读变量都存储在.rodata只读数据段中 1.字面值常量 literal 整形字面值 123, 0xff00ff 字符常量,类型总是 int, 'a', ...

  4. 题解:USACO23OPEN-Silver

    题解:USACO23OPEN-Silver T1 Milk Sum 给定一个长度为 \(N\) 的序列 \(a_1,a_2,...,a_n\),现在给出 \(Q\) 次操作每次将 \(a_x\) 修改 ...

  5. Java后端请求想接收多个对象入参的数据方法

    在Java后端开发中,如果我们希望接收多个对象作为HTTP请求的入参,可以使用Spring Boot框架来简化这一过程.Spring Boot提供了强大的RESTful API支持,能够方便地处理各种 ...

  6. 9.Kubernetes核心技术-Controller

    Kubernetes核心技术-Controller 内容 什么是Controller Pod和Controller的关系 Deployment控制器应用场景 yaml文件字段说明 Deployment ...

  7. Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解

    title: Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解 date: 2024/11/14 updated: 2024/11/14 author: cmdragon ...

  8. 一文搞懂 ARM 64 系列: ADD(立即数版)

    汇编中,加法指令很重要,因为它是执行其他很多指令的基础. 同时,加法指令也会影响NZCV标志.有关NZCV的介绍,可以参看<一文搞懂 ARM 64 系列: ADC>. ARM64汇编中,A ...

  9. php 版本升级后需要对代码进行兼容性检测

    来到需要检测代码的目录下 需要提前安装 docker 执行 docker run --rm -v $(pwd):/app vfac/php7compatibility 7.3 . --ignore=v ...

  10. golang之常用开发工具

    汇总平常开发中较为常用的工具 [sql2struct] 将MySQL快速生成struct github:  https://github.com/idoubi/sql2struct