(六)Spark大数据开发实战:豆瓣电影数据处理与分析(scala版)

目录

一、Spark

二、数据介绍

三、Spark大数据开发实战(Scala)

1、数据文件上传HDFS

2、导入模块及数据

3、数据统计与分析

①、计算演员参演电影数

②、依次罗列电影番位前十的演员

③、按照番位计算演员参演电影数

④、求每位演员所有参演电影中的最早、最晚上映时间及其相隔天数、年数

⑤、求每位演员所有电影中的评分最高值、最低值、电影数量、评分均值、标准差、方差、最高最低评分之差值

⑥、求参演大于等于10部电影的每位演员的平均评分,计算规则:去掉一个最高分和一个最低分,然后再计算电影平均分

⑦、求投票数在所有电影中排前80%、评分在所有电影中排前20%的电影信息

⑧、求美国、中国(含港澳台)、英国、法国、俄罗斯5个国家各个电影类型的上映电影数目

⑨、求各个地区评分最高的电影,若并列第一则以“|”拼接

⑩、统计从数据中最早年份到最晚年份的每月上映电影数量,若某个月份无电影上映则数量为0

4、完整代码

5、编译与运行

①、创建sbt项目

②、创建build.sbt文件

③、编译项目

④、打包项目

⑤、运行Spark应用程序

6、下载统计结果

四、总结


一、Spark

Apache Spark是一个用于大数据处理的开源分布式计算框架,Spark的很多内部组件都是用Scala编写的,Scala的函数式编程特性与Spark的分布式数据结构(如RDD、DataFrame和Dataset)非常契合。Scala也是Spark的主要编程语言之一,Spark API在Scala中得到了原生的支持,使得Scala成为开发Spark应用程序的首选语言。Scala编译后的字节码运行在JVM上,与Java一样,有着良好的性能。

本文软件环境如下:

操作系统:CentOS Linux 7

Hadoop版本:3.1.3,安装教程可见我另一篇博客内容:Linux CentOS安装Hadoop3.1.3(单机版)详细教程

Spark版本:3.5.2,安装教程可见我另一篇博客内容:Linux CentOS安装PySpark3.5(单机版)详细教程及机器学习实战

scala版本:2.12.18

Spark系列文章:

(一)PySpark3:安装教程及RDD编程

(二)PySpark3:SparkSQL编程

(三)PySpark3:SparkSQL40题

(四)PySpark3:Mlib机器学习实战-信用卡交易数据异常检测

(五)Spark大数据开发实战:豆瓣电影数据处理与分析(python版)

(六)Spark大数据开发实战:豆瓣电影数据处理与分析(scala版)

二、数据介绍

本文数据来自采集豆瓣网分类排行榜 (“https://movie.douban.com/chart”)中各分类类别所有电影的相关信息并存储为csv文件。

爬虫代码在我另一篇博客:豆瓣电影信息爬取与可视化分析

数据放在了百度云上:https://pan.baidu.com/s/1YWB2iEOsMmXHkEUFpY2_TA?pwd=ej3z

数据如下图所示,包含电影名、上映日期、上映地区、类型、豆瓣链接、参演演员、演员数、评分、打分人数,共有3357部电影:

三、Spark大数据开发实战(Scala)

1、数据文件上传HDFS

首先通过xftp上传linux服务器,然后通过以下命令上传至HDFS:

hdfs dfs -mkdir /data
hdfs dfs -mkdir /output
hdfs dfs -put film_info.csv /data

2、导入模块及数据

import spark.implicits._ 导入了SparkSession实例的隐式转换,允许将Scala的集合转换为Spark的DataFrame,对于处理数据时非常有用。

import org.apache.spark.sql.{SparkSession, functions => F}
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.types._
import org.apache.spark.sql.expressions.UserDefinedFunctionobject FilmAnalysis {def main(args: Array[String]): Unit = {val spark = SparkSession.builder().getOrCreate()import spark.implicits._val df = spark.read.option("header", "true")  // 告知Spark CSV文件的第一行是列名.option("inferSchema", "true") // 让Spark自动推断每列的数据类型.csv("/data/film_info.csv")  // 指定要读取的CSV文件的路径

3、数据统计与分析

①、计算演员参演电影数

以下代码中使用了spark sql进行统计,也可以通过DataFrame API进行统计。

    val dfSplit = df.withColumn("actors", F.split(df("actors"), "\\|")).withColumn("types", F.split(df("types"), "\\|")).withColumn("regions", F.split(df("regions"), "\\|"))val dfExploded = dfSplit.withColumn("actor", F.explode(dfSplit("actors")))dfExploded.drop("actors", "regions", "types").createOrReplaceTempView("actor_exploded")val df1 = spark.sql("""|select actor, count(*) as act_film_num|from actor_exploded|group by actor""".stripMargin).orderBy(F.col("act_film_num").desc)df1.repartition(1).write.option("header", "true").mode("overwrite").csv("/output/result1.csv")

结果如下:

+-------------+------------+
|        actor|act_film_num|
+-------------+------------+
|       童自荣|          43|
|     户田惠子|          37|
|         林雪|          33|
|       张国荣|          32|
|       刘德华|          31|
|       周星驰|          31|
|         成龙|          31|
|       任达华|          31|
|         刘洵|          30|
|塞缪尔·杰克逊|          29|
|  汤姆·汉克斯|          29|
|       梁家辉|          28|
|       吴孟达|          28|
|       梁朝伟|          27|
|      斯坦·李|          27|
|       吴君如|          27|
|    威廉·达福|          27|
|       黄秋生|          27|
|       胡立成|          27|
|  布拉德·皮特|          26|
+-------------+------------+
only showing top 20 rows
②、依次罗列电影番位前十的演员

这一题考察了窗口函数、行转列等等。

    val windowSpec1 = Window.partitionBy("title").orderBy("actors")val rankNum = 10val rankNumList = (1 to rankNum).map(_.toString)val df2 = dfExploded.withColumn("rank", F.row_number().over(windowSpec1))val df2Tmp1 = df2.groupBy("title").pivot("rank", rankNumList).agg(F.collect_list("actor"))// 从list提取值,并更改列名val processedCols = rankNumList.map(i => F.col(s"$i").getItem(0).as(s"actor$i"))// 筛选需要的列val df2Tmp2 = df2Tmp1.select(F.col("title") +: processedCols: _*)df2Tmp2.repartition(1).write.option("header", "true").mode("overwrite").csv("/output/result2.csv")

结果如下:

+------------------------+-------------------+---------------------+------------------+---------------+-----------------+----------------------+-------------------+---------------------+-----------------+-----------------+
|                   title|             actor1|               actor2|            actor3|         actor4|           actor5|                actor6|             actor7|               actor8|           actor9|          actor10|
+------------------------+-------------------+---------------------+------------------+---------------+-----------------+----------------------+-------------------+---------------------+-----------------+-----------------+
|                 101忠狗|          罗德·泰勒|            凯特·鲍尔|           本·怀特|    丽莎·戴维斯| 贝蒂·洛乌·格尔森|         J·帕特·奥马利|      玛莎·温特沃思|      大卫·弗兰克海姆|弗莱德里克·沃洛克|        汤姆·康威|
|                   11:14|        亨利·托马斯|          布莱克·赫伦|       芭芭拉·赫希|  克拉克·格雷格|    希拉里·斯万克|           肖恩·海托西|      斯塔克·桑德斯|          科林·汉克斯|        本·福斯特|  帕特里克·斯威兹|
|                    2012|        约翰·库萨克|          阿曼达·皮特|     切瓦特·埃加福|      坦迪·牛顿|    奥利弗·普莱特|           汤姆·麦卡锡|        伍迪·哈里森|          丹尼·格洛弗|      连姆·詹姆斯|        摩根·莉莉|
|                    2046|             梁朝伟|               章子怡|              王菲|       木村拓哉|             巩俐|                刘嘉玲|               张震|               张曼玉|             董洁|      通猜·麦金泰|
|                    21克|            西恩·潘|          娜奥米·沃茨|本尼西奥·德尔·托罗|  夏洛特·甘斯布|      梅丽莎·里奥|         迈克尔·芬内尔|      Jessica Scott|          戴维·查特姆|    Chance Romero|      Carly Nahon|
|               BABY BLUE|           柳乐优弥|             菊地凛子|              NULL|           NULL|             NULL|                  NULL|               NULL|                 NULL|             NULL|             NULL|
|           Hello!树先生|             王宝强|                 谭卓|              何洁|         白培将|           王大治|                王亚彬|             李京怡|               邱士鉴|             NULL|             NULL|
|            Soho区惊魂夜|      托马辛·麦肯齐|       安雅·泰勒-乔伊|       马特·史密斯|    黛安娜·里格|    丽塔·塔欣厄姆|           迈克尔·阿乔|      特伦斯·斯坦普|        山姆·克拉弗林|        科林·梅斯|    西诺薇·卡尔森|
|一个叫欧维的男人决定去死|      罗夫·拉斯加德|            巴哈·帕斯| 托比亚斯·阿姆博瑞|    菲利普·伯格| 安娜-莱娜·布伦丁|           博瑞·伦贝里|        埃达·英格薇|    弗雷德里克·埃弗斯|  玛德琳·雅各布松|    查特里娜·拉松|
|                一九四四|    卡斯帕·威尔伯格|克里斯蒂安·乌克斯库拉|       麦肯·施密特|      格特·劳塞|亨德里克·图姆佩勒|卡尔·安德烈亚斯·卡梅特|    亨里克·卡尔梅特|            帕努·欧加|  普瑞特·斯川伯格|    普瑞特·派厄斯|
|          一分钟时间机器|        布莱恩·迪岑|        埃瑞恩·海耶斯|              NULL|           NULL|             NULL|                  NULL|               NULL|                 NULL|             NULL|             NULL|
|                一声叹息|             张国立|                 刘蓓|              徐帆|           傅彪|           李诚儒|                  吴旭|             修宗迪|                 高明|           徐秀林|           李文玲|
|            一条狗的使命|          乔什·加德|        布丽特·罗伯森|       丹尼斯·奎德|    佩吉·利普顿|         K·J·阿帕|         布莱斯·吉扎尔|      朱丽叶·赖伦斯|            卢克·柯比|  加布里埃尔·罗斯|迈克尔·博夫舍维尔|
|                一袋弹子|   多里安·勒·克利奇|  巴蒂斯特·弗勒里埃尔|   帕特里克·布鲁尔|艾尔莎·泽贝斯坦|      贝尔纳·康庞|           凯文·亚当斯|克里斯蒂昂·克拉维埃|          凯撒·东布瓦|      伊连·贝加拉|      埃米尔·贝宁|
|              丁丁历险记|          杰米·贝尔|          安迪·瑟金斯|     丹尼尔·克雷格|      西蒙·佩吉|    尼克·弗罗斯特|         加利·艾尔维斯|          托比·琼斯|          彼得·杰克逊|    加德·艾尔马莱|  塞巴斯蒂安·罗奇|
|              三个发明家|      米歇尔·欧斯洛|                 NULL|              NULL|           NULL|             NULL|                  NULL|               NULL|                 NULL|             NULL|             NULL|
|          三傻大闹宝莱坞|          阿米尔·汗|        卡琳娜·卡普尔|            马达范|    沙尔曼·乔希|      奥米·瓦依达|           博曼·伊拉尼|          莫娜·辛格|拉杰夫·拉宾德拉纳特安|      Atul Tiwari|      阿里·法扎勒|
|            三十九级台阶|      罗伯特·多纳特|          玛德琳·卡洛|       露西·曼海姆|    戈弗雷·特尔|佩吉·阿什克罗福特|             约翰·劳里|           海伦哈耶|            怀利·沃森|    格斯·麦克诺顿|    查尔斯·贝内特|
|                  三十二|             韦绍兰|               罗善学|              NULL|           NULL|             NULL|                  NULL|               NULL|                 NULL|             NULL|             NULL|
|              三块广告牌|弗兰西斯·麦克多蒙德|          伍迪·哈里森|     山姆·洛克威尔|    艾比·考尼什|    卢卡斯·赫奇斯|           彼特·丁拉基|        约翰·浩克斯|   卡莱伯·兰德里·琼斯|      凯瑟琳·纽顿|        凯瑞·康顿|
+------------------------+-------------------+---------------------+------------------+---------------+-----------------+----------------------+-------------------+---------------------+-----------------+-----------------+
only showing top 20 rows

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/471228.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC学习笔记(二)

五、Rest风格编程 (一)Rest风格URL规范介绍 1、什么是restful RESTful架构,就是目前最流行的一种互联网软件架构风格。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。REST这个词,是Roy T…

PyTorch深度学习与企业级项目实战-预训练语言模型GPT

【图书推荐】《PyTorch深度学习与企业级项目实战》-CSDN博客 13个PyTorch深度学习案例简介-CSDN博客 《PyTorch深度学习与企业级项目实战(人工智能技术丛书)》(宋立桓,宋立林)【摘要 书评 试读】- 京东图书 (jd.com) PyTorch深度学习算法与…

CTF攻防世界小白刷题自学笔记13

1.fileinclude,难度:1,方向:Web 题目来源:宜兴网信办 题目描述:无 给一下题目链接:攻防世界Web方向新手模式第16题。 打开一看给了很多提示,什么language在index.php的第九行,flag在flag.php中,但事情显…

【QT常用技术讲解】优化网络链接不上导致qt、qml界面卡顿的问题

前言 qt、qml项目经常会涉及访问MySQL数据库、网络服务器,并且界面打开时的初始化过程就会涉及到链接Mysql、网络服务器获取数据,如果网络不通,卡个几十秒,会让用户觉得非常的不爽,本文从技术调研的角度讲解解决此类问…

基于OpenCV的自制Python访客识别程序

这是我用Pyqt5,基于OpenCV做的一个Python访客识别程序,它具体包括如下5个功能: 1、选择媒体菜单,可以打开本地摄像头;如果知道rtsp地址,则可以直接访问局域网内的网络串流。 2、选择播放菜单,…

SQL集合运算

集合论是SQL语言的根基。 1 集合运算 注意事项: 1)SQL能操作具有重复行的集合,可以通过可选项ALL来支持。 如果直接使用UNION或INTERSECT,结果里不会出现重复的行。如果想在结果里留下重复行,可以加上可选项ALL。写…

Gartner发布安全平台创新洞察:安全平台需具备的11项常见服务

安全和风险管理领导者的任务是管理多个安全供应商和复杂的基础设施堆栈。本研究提供了有关安全平台优势和风险的见解,并提供了为组织选择合适平台的建议。 主要发现 自适应和行为安全防御需要跨安全基础设施组件进行更多的协调,而目前孤立的异构供应商架…

基于海思soc的智能产品开发(两个图像处理来源)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 对于图像,大家能够想到的一般就是sensor,也就是摄像头。其实对于图像来说,还有另外一个来源,那就是…

如何使用 Web Scraper API 高效采集 Facebook 用户帖子信息

目录 前言一、什么是Web Scraper API二、Web Scraper API 的优势:三、Web Scraper API 适用场景四、实践案例目标需求视频讲解1、选择Web Scraper API2、登录注册3、进入用户控制面板4、选择API5、触发数据收集 API6、获取爬虫结果7、分析爬虫结果(1&…

微信小程序中使用离线版阿里云矢量图标

前言 阿里矢量图库提供的在线链接服务仅供平台体验和调试使用,平台不承诺服务的稳定性,企业客户需下载字体包自行发布使用并做好备份。 1.下载图标 将阿里矢量图库的图标先下载下来 解压如下 2.转换格式 贴一个地址用于转换格式:Onlin…

Ubuntu 的 ROS 操作系统安装与测试

引言 机器人操作系统(ROS, Robot Operating System)是一个用于开发机器人应用的开源框架,它提供了一系列功能丰富的库和工具,能够帮助开发者构建和控制机器人。 当前,ROS1的最新版本为Noetic Ninjemys,专为…

封装一个省市区的筛选组件

筛选功能&#xff1a;只能单选&#xff08;如需多选需要添加show-checkbox多选框属性&#xff09;&#xff0c;选中省传递省的ID&#xff0c;选中市传递省、市的ID&#xff0c; 选中区传递省市区的ID 父组件&#xff1a; <el-form-item><div style"width: 240px;…

python制作一个简单的端口扫描器,用于检测目标主机上指定端口的开放状态

import argparse # 用于解析命令行参数 from socket import * # 导入 socket 库的所有内容&#xff0c;用于网络通信 from threading import * # 导入 threading 库的所有内容&#xff0c;用于多线程操作 # 创建一个信号量&#xff0c;初始值为 1&#xff0c;用于线程同步&…

OceanStor Pacific系列 8.1.0 功能架构

功能架构 华为OceanStor Pacific系列提供基于三层的分布式存储架构&#xff0c;融合分布式文件、对象、大数据和块多个服务形态&#xff0c;支持文件、对象、大数据服务部署在一个集群&#xff0c;并统一管理。 华为OceanStor Pacific系列整体功能架构由存储接口层、存储服务…

Flink1.19编译并Standalone模式本地运行

1.首先下载源码 2.本地运行 新建local_conf和local_lib文件夹&#xff0c;并且将编译后的文件放入对应的目录 2.1 启动前参数配置 2.1.2 StandaloneSessionClusterEntrypoint启动参数修改 2.1.3 TaskManagerRunner启动参数修改 和StandaloneSessionClusterEntrypoint一样修改…

高效稳定!新加坡服务器托管方案助力企业全球化布局

在全球化的商业环境中&#xff0c;企业对于高效、稳定的服务器托管方案的需求日益迫切。作为亚洲的服务器托管中心&#xff0c;新加坡凭借其独特的地理位置、稳定的政治环境、先进的科技设施以及开放的市场政策&#xff0c;为企业提供了理想的服务器托管解决方案&#xff0c;助…

JavaWeb后端开发知识储备1

目录 1.DTO/VO/PO 2.MVC架构/微服务架构 3.JWT令牌流程 4.ThreadLocal 5.接口路径/路径参数 1.DTO/VO/PO 1.1 DTO DTO 即 Data Transfer Object—— 数据传输对象&#xff0c;是用于传输数据的对象&#xff0c;通常在服务层与表现层之间传递数据&#xff0c;DTO 通常用于…

StructuredStreaming (一)

一、sparkStreaming的不足 1.基于微批,延迟高不能做到真正的实时 2.DStream基于RDD,不直接支持SQL 3.流批处理的API应用层不统一,(流用的DStream-底层是RDD,批用的DF/DS/RDD) 4.不支持EventTime事件时间&#xff08;一般流处理都会有两个时间&#xff1a;事件发生的事件&am…

信号-3-信号处理

main 信号捕捉的操作 sigaction struct sigaction OS不允许信号处理方法进行嵌套&#xff1a;某一个信号正在被处理时&#xff0c;OS会自动block改信号&#xff0c;之后会自动恢复 同理&#xff0c;sigaction.sa_mask 为捕捉指定信号后临时屏蔽的表 pending什么时候清零&…

软件工程师简历(精选篇)

【#软件工程师简历#】 一份专业而精准的软件工程师简历&#xff0c;不仅能够全面展示技术实力和项目经验&#xff0c;更是赢得理想工作机会的重要敲门砖。那么&#xff0c;如何撰写一份令人印象深刻的软件工程师简历呢&#xff1f;以下是幻主简历整理的软件工程师简历&#xf…