Spark编程经典综合案例

Spark实战案例-需求1-Top10热门品类 文章目录第5章 Spark案例实操6.1 需求1:Top10热门品类6.1.1 需求说明6.1.2 实现方案一6.1.2.1 需求分析6.1.2.2 需求实现6.1.3 实现方案二6.1.3.1 需求分析6.1.3.2 需求实现6.1.4 实现方案三6.1.4.1 需求分析6.1.4.2 需求实现 第5章 Spark案例实操 在之前的学习中,我们已经学习了Spark的基础编程方式,接下来,我们看看在实际的工作中如何使用这些API实现具体的需求。这些需求是电商网站的真实需求,所以在实现功能前,咱们必须先将 阅读详情

1. 求TOP值

两个文件包含4个字段orderid、userid、payment、productid,求TopN个payment值。

file1.txt

1,1768,50,155
2,1218,600,211
3,2239,788,242
4,3101,28,599
5,4899,290,129
6,3110,54,1201
7,4436,259,877
8,2369,7890,27

file2.txt

100,4287,226,233
101,6562,489,124
102,1124,33,17
103,3267,159,179
104,4569,57,125
105,1438,37,116

import org.apache.spark.sql.SparkSession

object Test {
    def main(args: Array[String]): Unit = {
        val spark = SparkSession
          .builder()
          .appName("wc")
          .master("local")
          .getOrCreate()
        spark.sparkContext.setLogLevel("ERROR")
        val input_path = "/Users/zz/Desktop/input/"
        // 分区数目为2,2个文件
        val lines = spark.sparkContext.textFile(input_path, 2)
        var num = 0
        val result = lines.filter(line => (line.trim().length > 0)
          && (line.split(",").length == 4))
          .map(_.split(",")(2))      // 取第三列
          .map(x => (x.toInt, ""))  // 转换为kv
          .sortByKey(false)
          .map(x => x._1).take(5)
          .foreach(x => {
              num = num + 1
              println(num + "\t" + x)
          })
        spark.stop()
    }
}

输出

1    7890
2    788
3    600
4    489
5    290

2. 求最大值最小值

file1.txt

129
54
167
324
111
54
26
697
4856
3418

file2.txt

5
329
14
4567
2186
457
35
267

spark.sparkContext.setLogLevel("ERROR")
val input_path = "/Users/zenmen/Desktop/input/"
// 2为分区数目
val lines = spark.sparkContext.textFile(input_path, 2)
val max = lines.filter(line => (line.trim().length > 0))
  .map(x => (x.trim().toInt, ""))
  .sortByKey(false)    //生序则可取出最小值
  .map(x => x._1)
  .take(1)
max.foreach(println)

或

val input_path = "/Users/zenmen/Desktop/input/"
val lines = spark.sparkContext.textFile(input_path, 2)
val result = lines.filter(_.trim().length>0)
  .map(line => ("key", line.trim.toInt))
  .groupByKey()
  .map(x => {
    var min = Integer.MAX_VALUE
    var max = Integer.MIN_VALUE
    for(num <- x._2){     // 对值列表进行遍历
      if(num>max){max=num}
      if(num<min){min=num}
    }
    (max,min)
  }).collect
  .foreach(x => {
    println("max= "+x._1)
    println("min= "+x._2)
  })

输出

max= 4856
min= 5

3. 文件排序

对多个输入文件进行排序,输出文件包括rank和value两列

file1.txt

33
37
12
40

file2.txt

4
16
39
5

file3.txt

1
45
25

import org.apache.spark.HashPartitioner
val input_path = "/Users/zenmen/Desktop/input/"
val output_path = "/Users/zenmen/Desktop/output/"
// 分区数目为3
val lines = spark.sparkContext.textFile(input_path, 3)
var index = 0
val result = lines.filter(_.trim().length>0)
  .map(line => (line.trim.toInt, ""))
  .partitionBy(new HashPartitioner(1))   // 确保排序结果的准确性
  .sortByKey()
  .map(t => {
    index += 1
    (index,t._1)
  })
result.saveAsTextFile(output_path)

输出

(1,1)
(2,4)
(3,5)
(4,12)
(5,16)
(6,25)
(7,33)
(8,37)
(9,39)
(10,40)
(11,45)

4. 二次排序

对于一个输入文件,首先根据第一列进行排序,若数据相等,则根据第二列进行排序。

file.txt

5 3
1 6
4 9
8 3
5 7
5 6
3 2

实现步骤:

1. 按照Ordered 和 Serializable接口实现自定义排序的key;

2. 加载将要进行二次排序的文件,生成kv类型的RDD;

3. 使用sortByKey基于自定义的key进行二次排序;

4. 去除掉排序的key,只保留排序的结果。

class SecondarySortKey(val first:Int, val second:Int)
  extends Ordered[SecondarySortKey] with Serializable {
  override def compare(other: SecondarySortKey): Int = {
    if(this.first-other.first!=0){  // first 不相等
      this.first-other.first
    }else{
      this.second-other.second
    }
  }
}

val input_path = "/Users/zenmen/Desktop/input/file.txt"
// 分区数目为1
val lines = spark.sparkContext.textFile(input_path, 1)
val result = lines.map(line => (new SecondarySortKey(
  line.split(" ")(0).toInt,
  line.split(" ")(1).toInt),
  line)
).sortByKey(false)
.map(_._2)   // 取出line列
.collect().foreach(println)

输出:

5. 连接操作

给定两个文件,file1.txt为用户电影评分表,包含uid,movieId,score三个字段;file2.txt为电影信息表包括movieId,movieName两个字段。取出平均分大于4.0的电影。

file1.txt

1::100::3.1
2::101::6.2
3::100::9.3
4::100::3.4
5::101::7.5
6::102::6.6
7::103::2.7

file2.txt

100,huluwa
101,aoteman
102,huoying
103,sunwukong

spark.sparkContext.setLogLevel("ERROR")
val input_path_1 = "/Users/zenmen/Desktop/input/file1.txt"
val input_path_2 = "/Users/zenmen/Desktop/input/file2.txt"
val output_path = "/Users/zenmen/Desktop/output/"
val rdd1 = spark.sparkContext.textFile(input_path_1)
  .map(line => {
    val fileds = line.split("::")
    (fileds(1).toInt, fileds(2).toDouble)
  }).groupByKey()  // 电影维度进行聚合,计算得分平均值
  .map(data => {
    val avg = data._2.sum / data._2.size
    (data._1, avg)
  }
)
rdd1.foreach(println)

val rdd2 = spark.sparkContext.textFile(input_path_2)
  .map(line => {
    val fields = line.split(",")
    (fields(0).toInt, fields(1))   // 使用keyBy时,需把key转换为int
  }
).keyBy(_._1)
rdd2.foreach(println)

 

 keyBy将第一个值作为key,将整体作为value。

val result = rdd1.keyBy(tup => tup._1).join(rdd2)  // 根据keyBy的键进行join
result.foreach(println)

val result_final = result.filter(f => f._2._1._2 > 4.0)
  .map(f => (f._1, f._2._2._2, f._2._1._2))
result_final.foreach(println)
// result_final.saveAsTextFile(output_path)

 

基于Spark MLib的鸢尾花数据聚类项目实战案例 目录背景KMeans原理实训操作一、准备数据二、对数据进行聚类 背景 聚类(Cluster analysis)有时也被翻译为簇类,其核心任务是:将一组目标object划分为若干个簇,每个簇之间的object尽可能相似,簇与簇之间的object尽可能相异。聚类算法是机器学习(或者说是数据挖掘更合适)中重要的一部分,除了最为简单的K-Means聚类算法外,比较常见的还有层次法(CURE、CHAMELEON等)、网格算法(STING、WaveCluster等),等等。 较权威的聚类问题定义:所谓聚类问题,就是给定 阅读详情

相关推荐

Spark在数据科学中的应用案例分析

图数据分析是数据科学中的另一个重要领域,而Spark的图计算框架GraphX提供了强大的图数据处理和分析能力。通过合理地利用Spark的计算能力和优化策略,可以高效地处理大规模数据集,并从中挖掘出有价值的信息,为决策提供支持。在上述代码中,我们使用Spark MLlib中的逻辑回归算法进行模型训练,并通过准确率评估了模型的性能。机器学习是数据科学领域的热点之一,而Spark提供了强大的机器学习库MLlib,支持各种常见的机器学习算法。通过Spark的并行计算能力,可以高效地训练大规模的机器学习模型。

liqinkuaia的博客 1492

大数据之Spark案例实操完整使用(第六章)

上面的数据图是从数据文件中截取的一部分内容,表示为电商网站的用户行为数据,主要包含用户的 4 种行为:搜索,点击,下单,支付。数据规则如下:➢ 数据文件中每行数据采用下划线分隔数据➢ 每一行数据表示用户的一次行为,这个行为只能是 4 种行为的一种➢ 如果搜索关键字为 null,表示数据不是搜索数据➢ 如果点击的品类 ID 和产品 ID 为-1,表示数据不是点击数据➢ 针对于下单行为,一次可以下单多个商品,所以品类 ID 和产品 ID 可以是多个,id 之间采用逗号分隔,如果本次不是下单行为,则数据采用 nu

小坏说Java,一个专注Java微服务架构的实战,Java全栈教程,SpringBoot, SpringCloud微服务到分布式、高并发架构,大数据开发,运维实战,K8S、Docker容器为一体的教程,结合企业级内部的技术栈学习 2944

CC00021.spark——|Hadoop&Spark.V09|——|Spark.v09|sparkcore|算子综合案例&wordcount-Java|

一、算子综合案例wordcount-java ### --- WordCount - java ~~~ Spark提供了:Scala、Java、Python、R语言的API;对 Scala 和 Java 语言的支持最好; ### --- 源码地址说明 ~~~ 地址:https://spark.apache.org/docs/latest/rdd-programm...

yanqi_vip 316

Spark的7个案例

/** * 1.处理average.txt,计算出第二列数据的均值 * 1 16 * 2 74 */ package com.dasenlin.spark import org.apache.spark.SparkConf import org.apache.spark.SparkContext object Average { def main(args: Arra...

rentian1的博客 1669

Spark:离线综合案例

分布式计算平台Spark:离线综合案例 一、回顾 SparkSQL使用 开发接口 DSL:使用函数来对表进行处理,类似于RDD的编程,表的体现:DF、DS SQL语法函数:select、where、groupBy、orderBy、limit、agg RDD的函数:map/filter/flatMap SQL:使用SQL语句来实现对表的处理,类似于Hive的编程,表的体现:DF/DS注册成视图、Hive表 step1:将数据集注册为视图 step2:通过SQL语句进行处理 UDF函

qq_43528451的博客 2501

Kafka与Spark案例实践

Kafka系统的灵活多变,让它拥有丰富的拓展性,可以与第三方套件很方便的对接。例如,实时计算引擎Spark。接下来通过一个完整案例,运用Kafka和Spark来合理完成。

「 虚幻私塾」 2036

spark教程python案例_spark自带的python例子的分析

这里分析一下spark自带的求PI的例子,做为入门的代码首先要介绍一下这个求PI的原理其实也算是使用的蒙特卡洛模拟算法, 基本的方法就是考虑一下边长为1的正方形其中以正方形的一个点为中心,以1为半径画圆的话,可以有1/4个圆画到正方形中, 根据这个原理来随机的生成(1, 1)之间的点如果满足x2 + y2 1 else 2n = 100000 * partitions//定义闭包函数def f(...

weixin_39894473的博客 353

Spark快速入门与实战案例解析

在当今的大数据时代,数据处理速度与效率成为了竞争的关键。作为一款开源的分布式计算框架,Apache Spark 以其高效的内存计算和简洁的编程模型,迅速成为数据工程师和科学家们的必备工具。无论是批量数据处理,还是实时数据流分析,Spark 都可以游刃有余地胜任。本篇文章将围绕【Spark 快速入门】展开,通过从基础原理到案例实操的方式,帮助大家快速理解 Spark 的核心概念与应用场景。同时,文章将深入拓展 Spark 相关知识,帮助读者加深理解。

喵手的博客 3503

Spark【RDD编程(四)综合案例】

Spark RDD编程综合案例

功不唐捐,玉汝于成 1642

Python爬虫获取Shopee店铺的所有商品?

通过上述代码示例,我们可以轻松实现获取Shopee店铺所有商品信息的功能。Python爬虫不仅具有强大的功能和稳定性,还可以通过丰富的库支持实现高效的数据抓取和解析。希望这篇文章能为你提供一些启发和帮助。如果你对爬虫开发有更多兴趣,可以尝试探索更复杂的功能,如多线程爬取、数据可视化等。如果你在实践中遇到任何问题,欢迎随时交流和讨论。让我们一起用技术的力量,解锁更多可能!

2401_87195067的博客 1544

Windows环境下pcl点云库 安装配置全流程(精简、有效)

本文为Windows配置点云库pcl步骤,具体是win10、visual studio 2017、pcl1.11.1。

zaibeijixing的专栏 1万+

Spark综合大作业:RDD编程初级实践

Spark综合大作业:RDD编程初级实践 实验配置:操作系统:Ubuntu16.04 | 环境:Spark版本:2.4.0 | 软件:Python版本:3.4.3。 文章目录一、实验目的二、实验平台三、实验内容和要求1、pyspark交互式编程2、编写独立应用程序实现数据去重3、编写独立应用程序实现求平均值问题四、经验总结五、参考文献 一、实验目的 (1)熟悉Spark的RDD基本操作及键值对操作; (2)熟悉使用RDD编程解决实际具体问题的方法。 二、实验平台 本次大作业的实验是操作系统:Ubuntu1

weixin_48338701的博客 1万+

【软考之软件设计师】学习笔记

interface 接口implements 实现接口(与接口配套使用)接口里要是有方法定义,子类就会实现。

云轩阁 2533

150、Spark核心编程进阶之综合案例

案例背景 如果你是在一个互联网公司,然后你的公司现在也在做移动互联网,做了一个手机app 那么你的手机app的用户,每次进行点击,或者是一些搜索操作的时候,都会跟你的远程的后端服务器做一次交互 也就是说,你的手机app,首先会往后端服务器发送一个请求,然后你的后端服务器会给你的手机app返回一个响应,响应的内容可能是图片、或者文字、或者json 此时,就完成了一次你的移动端app和后端服务器之间...

ZJ__ZFH的博客 1417

MTK(基础篇)ROM烧录以及分区的作用

本文介绍了MTK芯片设备的刷机流程及关键分区功能。首先通过MTK烧录工具加载ROM文件(包括引导文件和分区表),重点解析了各分区的核心作用:preloader类似BIOS负责硬件初始化;lk作为二级引导程序加载内核;vbmeta验证系统完整性;boot包含Linux内核;dtbo调整硬件配置;modem管理通信功能;tee保护生物识别数据;system/vendor分别存放系统核心和硬件驱动。特别指出preloader、vbmeta等关键分区损坏会导致设备变砖,而recovery分区是重要的救砖入口。全文简

weixin_49303682的博客 444

Python爬虫反爬:突破Cloudflare 5秒盾(免费方案,小红书/知乎可用)

这套方案的核心优势是“真实模拟+免费无门槛”无需付费代理、无需复杂JS解密,仅用playwright模拟真实浏览器,即可突破Cloudflare 5秒盾;适配小红书、知乎、豆瓣等主流平台,修改配置即可复用;兼顾易用性和稳定性,新手也能快速上手,企业级场景可通过IP轮换、异步爬取进一步优化。“模拟人类行为到底”——Cloudflare的反爬本质是区分“机器”和“人类”,只要爬虫的浏览器指纹、行为特征与人类一致,就能稳定绕过限制。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2881

Spark编程实验二:RDD编程初级实践

本实验的目的是掌握Spark的RDD基本操作及键值对操作,熟悉使用RDD编程解决实际具体问题的方法。

Morse_Chen的博客 6885

Ut接口原理及 VoLTE 补充业务自管理信令流程(GBA 引导认证+业务访问认证+ VoLTE 补充业务自管理)

2. Ut 接口及 VoLTE 业务子管理概述 2.1 UT 接口 —— VoLTE 终端补充业务配置 2.2终端通过 Ut 接口完成 VoLTE 补充业务自管理举例 2.3什么是 GBA 和 GAA 架构 2.4为什么要引入 GBA 架构认证及 BSF 网元 2.5UE(终端) 接口相关网元及功能 2.6GBA 架构流程概述 3. Ut 接口业务自管理信令流程 3.1 补充业务自管理及本文主要参考以下规范 3.2 Ut 接口业务自管理信令流程:查询补充业务 3.2.1 UE获

原来45的博客 1257

BigData之Spark:Spark计算引擎的简介、下载、经典案例之详细攻略续篇

BigData之Spark:Spark计算引擎的简介、下载、经典案例之详细攻略 目录 Spark的简介 1、Spark三大特点 Spark的下载 Spark的经典案例 1、Word Count 2、Pi Estimation 3、Text Search 4、Prediction with Logistic Regression Spark的简介 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Be...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 1953

FANUC机器人通过ROBOGUIDE实现与实际的机器人进行程序导入导出的具体方法示例

FANUC机器人通过ROBOGUIDE实现与实际的机器人进行程序导入导出的具体方法示例

Robot_PLC_HMI_Automation 6542

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spark基础编程案例

Spark基础编程案例 案例一:求网站的访问量 求出访问量最高的两个网页 要求显示:网页名称、访问量

csdnwindnorth的博客 430

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Spark综合练习——电影评分数据分析

以上便是电影评分数据分析spark版,愿你读过之后有自己的收获,如果有收获不妨一键三连一下~

Maynor的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

spark编程基础--5.4综合实例

.案例1:求TOP值1 案 //TopN.scala import org.apache.spark.{SparkConf, SparkContext} object TopN { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("TopN").setMaster("local") val sc = new SparkContext(conf) sc.setLog.

欢迎来到我的博客 2268

spark 编程流程及案例

第一步、数据的读取(输入) 将要处理的数据读取封装到一个集合RDD中(类比与Scala中List列表) val inputRDD = sc.textFile("…”) 第二步、数据处理(分析) 调用集合RDD中函数(高阶函数)进行处理分析 RDD ->函数 ->另外一个RDD :transformation函数 val outpuRDD = inputRDD.#(#:基本就是List中函数) 比如: map\flatMap\filter\reducebyKey 第三步、数据的输出(

qq_39674417的博客 777

BigData之Spark:Spark(大数据通用的分布式开源计算引擎)的简介、下载、经典案例之详细攻略

​ BigData之Spark:Spark(大数据通用的分布式开源计算引擎)的简介、下载、经典案例之详细攻略 目录 Spark的简介 Spark的下载 Spark的经典案例 Spark的简介 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 4809
上一篇: Spark数据读写--HDFS、HBase、Json
下一篇: Spark MLlib简介
MusicDancing
博客等级 码龄7年 2684粉丝 314原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值