Spark-Scala语言实战(15)

这篇具有很好参考价值的文章主要介绍了Spark-Scala语言实战(15)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在之前的文章中,我们学习了如何在spark中使用键值对中的学习键值对方法中的lookup,cogroup两种方法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。

Spark-Scala语言实战(14)-CSDN博客文章浏览阅读1.5k次,点赞33次,收藏25次。今天开始的文章,我会带给大家如何在spark的中使用我们的键值对方法,今天学习键值对方法中的lookup,cogroup两种方法。希望我的文章能帮助到大家,也欢迎大家来我的文章下交流讨论,共同进步。https://blog.csdn.net/qq_49513817/article/details/137441090

今天的文章开始,我会带着大家来做三道任务,运用之前学到的方法,温故知新,举一反三,将知识紧紧掌握,希望你能在我的文章中有所收获。 

目录

一、知识回顾

二、任务实现

1.使用Spark完成单词去重

2.使用Spark统计133 136 139开头的总流量

3.完成统计相同字母组成的单词


一、知识回顾

上一篇文章中我们学习了RDD键值对的两种方法,分别是lookup,cogroup。

lookup是我们的查找方法,它用于返回我们指定键所对应的值。

Spark-Scala语言实战(15),Spark-大数据技术与应用,spark,scala,大数据

我们创建了两个RDD一个名为p包含了我们的键值对,一个名为pp包含了我们需要查找的键。然后使用 map来实现我们的lookoup方法。 

运行代码它就会返回我们需要的键所对应的值,没有就会输出None

然后就是我们 cogroup方法。它是一种常见的组合操作,用于合并两个或多个数据组中具有相同键的数据。

Spark-Scala语言实战(15),Spark-大数据技术与应用,spark,scala,大数据

可以看到代码我们通过 cogroup方法将p1,p2组合到一起了,那么收集结果打印出来会是什么样子呢?

Spark-Scala语言实战(15),Spark-大数据技术与应用,spark,scala,大数据

它将我们值通过键全部合并在一起了

复习完毕,现在开始今天的学习吧~

二、任务实现

1.使用Spark完成单词去重

 现在我们有一个名为text01的txt文件

它里面的数据如下:

java php hello word
php hi exe java 
python hello kitty
php happy abc java

现在,我们需要用到之前所学的知识将它进行去重操作

解题思路:

首先我们肯定要将文件的内容读取出来

val p = sc.textFile("C:\\IDEA\\P1\\p1\\text01.txt")

然后就是切分我们文件的内容,将它里面的单词转换成一个数组啊,列表啊或者其他,根据需求转化。

    def pp(line: String): Array[String] = {
      line.split("\\s+")//'\s+中\ 是转义字符。s 是代表空白字符的元字符。+ 表示前面的字符或组(在这里是 \s)可以出现一次或多次。'
    }

这里我们使用了一个\\s+,它的意思注释的很清楚,主要作用还是设置我们的切分。

现在准备工作做完了就可以开始去重了

    val ppp= p.flatMap(pp)
    val pppp = ppp.distinct().collect()
    pppp.foreach(println)

 使用我们的distinct()方法进行去重操作,最后收集RDD数据并打印

完整代码:

import org.apache.spark.{SparkConf, SparkContext}

object p1 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("ppp")
    val sc = new SparkContext(conf)
    val p = sc.textFile("C:\\IDEA\\P1\\p1\\text01.txt")

    def pp(line: String): Array[String] = {
      line.split("\\s+")//'\s+中\ 是转义字符。s 是代表空白字符的元字符。+ 表示前面的字符或组(在这里是 \s)可以出现一次或多次。'
    }
    val ppp= p.flatMap(pp)
    val pppp = ppp.distinct().collect()
    pppp.foreach(println)
  }
}

 运行代码:

Spark-Scala语言实战(15),Spark-大数据技术与应用,spark,scala,大数据 

可以看到成功完成任务需求,读取外部文件并去重。 

2.使用Spark统计133 136 139开头的总流量

我们这里有两对数据,分别是手机号和使用的流量

13326293050 81
13626594101  50
13326435696  30
13926265119  40
13326564191  2106
13626544191  1432
13919199499  300

我们需要将它通过手机号前三位区分,然后统计133 136 139开头的总流量

解题思路:

在这里,我想到的方法是创建一个键值对,将手机号和流量进行一个对应

    val p = sc.parallelize(Array(
      (13326293050L, 81),
      (13626594101L, 50),
      (13326435696L, 30),
      (13926265119L, 40),
      (13326564191L, 2106),
      (13626544191L, 1432),
      (13919199499L, 300)//int超出存储限制,添加L变为long
    ))

 然后进行取前手机号三位并且使用groupByKey方法分组的方法

    val pp = p.map { case (phone, value) =>
      val prefix = (phone / 1000000).toString.take(3)
      (prefix, value)}.groupByKey()//取出前三位并分组

 最后将我们三个组里的数据进行一个sum求和并打印

    val ppp=pp.mapValues(_.sum)//值相加
    ppp.foreach(println)

 完整代码:

import org.apache.spark.{SparkConf, SparkContext}

object p2 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("ppp")
    val sc = new SparkContext(conf)
    val p = sc.parallelize(Array(
      (13326293050L, 81),
      (13626594101L, 50),
      (13326435696L, 30),
      (13926265119L, 40),
      (13326564191L, 2106),
      (13626544191L, 1432),
      (13919199499L, 300)//int超出存储限制,添加L变为long
    ))
    val pp = p.map { case (phone, value) =>
      val prefix = (phone / 1000000).toString.take(3)
      (prefix, value)}.groupByKey()//取出前三位并分组
    val ppp=pp.mapValues(_.sum)//值相加
    ppp.foreach(println)
  }
}

 运行代码:

Spark-Scala语言实战(15),Spark-大数据技术与应用,spark,scala,大数据

 完成任务,分组并统计流量

3.完成统计相同字母组成的单词

现在我们有一个名为text02的txt文件

它里面的数据如下:

abc acb java
avaj bac
cba abc
jvaa php hpp
pph python thonpy

现在,我们需要用到之前所学的知识将它统计相同字母组成的单词出现的次数。

解题思路:

首先,肯定还是要读取文件

    val p = sc.textFile("C:\\IDEA\\P1\\p1\\text02.txt")

 然后对单词中的字母排序

    def sortLetters(word: String): String = {
      word.toLowerCase().replaceAll("\\s+", "").sorted}

最后,分割单词,进行排序与reduceByKey方法统计 

    val pp = p
      .flatMap(_.split("\\s+")) // 分割每行文本为单词
      .map(word => (sortLetters(word), 1)) // 对单词中的字母进行排序,并映射到计数1
      .reduceByKey(_ + _) // 统计相同字母组成的单词数量

收集数据并打印

    pp.collect().foreach(println)

 完整代码:

import org.apache.spark.{SparkConf, SparkContext}

object p3 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("ppp")
    val sc = new SparkContext(conf)
    val p = sc.textFile("C:\\IDEA\\P1\\p1\\text02.txt")

    // 用于对单词中的字母进行排序
    def sortLetters(word: String): String = {
      word.toLowerCase().replaceAll("\\s+", "").sorted}
    // 对每一行文本进行处理,统计具有相同字母组成的单词数量
    val pp = p
      .flatMap(_.split("\\s+")) // 分割每行文本为单词
      .map(word => (sortLetters(word), 1)) // 对单词中的字母进行排序,并映射到计数1
      .reduceByKey(_ + _) // 统计相同字母组成的单词数量
    pp.collect().foreach(println)
  }
}

  运行代码:

Spark-Scala语言实战(15),Spark-大数据技术与应用,spark,scala,大数据  完成任务,统计相同字母组成的单词次数

 最后,代码的可变性很多,不同的写法不同的方法有时候也能完成相同的任务。我的解题思路可以当作一种参考,期待大家能用自己不同的方式完成任务。文章来源地址https://www.toymoban.com/news/detail-851654.html

到了这里,关于Spark-Scala语言实战(15)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spark-Scala语言实战(16)

    在之前的文章中,我们学习了三道任务,运用之前学到的方法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scala语言实战(15)-CSDN博客 文章浏览阅读1.5k次,点赞38次,收藏32次。今天开始

    2024年04月16日
    浏览(42)
  • Spark-Scala语言实战(6)

    在之前的文章中,我们学习了如何在scala中定义与使用类和对象,并做了几道例题。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scala语言实战(5)-CSDN博客 文章浏览阅读1.6k次,点赞51次,

    2024年04月17日
    浏览(44)
  • Spark-Scala语言实战(14)

    在之前的文章中,我们学习了如何在spark中使用键值对中的fullOuterJoin,zip,combineByKey三种方法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scala语言实战(13)-CSDN博客 文章浏览阅读735次

    2024年04月10日
    浏览(60)
  • Spark-Scala语言实战(12)

    在之前的文章中,我们学习了如何在spark中使用键值对中的join,rightOuterJoin,leftOuterJoin三种方法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scala语言实战(11)-CSDN博客 文章浏览阅读670次,

    2024年04月14日
    浏览(50)
  • Spark-Scala语言实战(8)

    在之前的文章中,我们学习了如何在spark中使用RDD方法的map,sortby,collect。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scala语言实战(7)-CSDN博客 文章浏览阅读802次,点赞22次,收藏8次。​

    2024年04月11日
    浏览(46)
  • Spark大数据分析与实战笔记(第一章 Scala语言基础-2)

    Spark是专为大规模数据处理而设计的快速通用的计算引擎,它是由Scala语言开发实现的,关于大数据技术,本身就是计算数据,而Scala既有面向对象组织项目工程的能力,又具备计算数据的功能,同时Spark和Scala的紧密集成,本书将采用Scala语言开发Spark程序,所以学好Scala将有助

    2024年02月11日
    浏览(62)
  • Spark大数据分析与实战笔记(第一章 Scala语言基础-3)

    对于每一门编程语言来说,数组(Array)都是重要的数据结构之一,主要用来存储数据类型相同的元素。Scala中的数组分为定长数组和变长数组,定义定长数组,需要使用new,而定义变长数组时,则需要导包 import scala.collection.mutable.ArrayBuffer 。 数组(Array)主要用来存储

    2024年02月10日
    浏览(64)
  • Spark大数据分析与实战笔记(第一章 Scala语言基础-1)

    Spark是专为大规模数据处理而设计的快速通用的计算引擎,它是由Scala语言开发实现的,关于大数据技术,本身就是计算数据,而Scala既有面向对象组织项目工程的能力,又具备计算数据的功能,同时Spark和Scala的紧密集成,本书将采用Scala语言开发Spark程序,所以学好Scala将有助

    2024年02月11日
    浏览(67)
  • 大数据Spark SparkSession的3种创建方式 Scala语言实现

    SparkSession是Apache Spark 2.0版本引入的一个编程接口,用于与Spark进行交互。它是Spark应用程序的入口点,提供了一种方便的方式来创建DataFrame、DataSet和SQLContext等数据结构,并且可以配置各种Spark应用程序的选项。SparkSession还管理了Spark应用程序的运行环境,包括Spark集群的连接,

    2023年04月20日
    浏览(38)
  • spark底层为什么选择使用scala语言开发

    基于Scala的语言特性 集成性:Scala 是一种运行在 Java 虚拟机(JVM)上的静态类型编程语言,可以与 Java 代码无缝集成。由于 Spark 涉及到与大量 Java 生态系统的交互,例如 Hadoop、Hive 等,使用 Scala 可以方便地与这些组件进行集成和交互。 函数式编程支持:Scala 是一种面向函数

    2024年02月10日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包