基于Spark的音乐专辑数据分析

这篇具有很好参考价值的文章主要介绍了基于Spark的音乐专辑数据分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

每天天都在努力学习的我们

前言

        本篇博客讲解的内容依旧是使用Spark进行相关的数据分析,按理来说数据分析完之后应该搞一搞可视化的,由于目前时间紧张,顾不得学习可视化了,先来看一下此次的内容把。

        在Kaggle数据平台下载了数据集albunms.csv,里面包含了的主要字段如下,先来看一下。

基于Spark的音乐专辑数据分析

使用Spark读取csv

        spark读取csv的方式有两种,一种是使用rdd进行读取csv,然后创建RDD对象。另一种是使用spark SQL进行读取,创建DataFrame对象。本篇博客使用Spark SQL进行读取文件,RDD和Data Frame处理数据。

        csv文件我们都知道,","分隔符,但是读取csv文件的同时也要注意是否有无表头,表头字段类型。下面来看一下Spark SQL读取csv。

private 
val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("Spark SQL") private
val sparkContext = new SparkContext(sparkConf) 
private val sparkSession: SparkSession =SparkSession.builder().config(sparkConf).getOrCreate() 

import sparkSession.implicits._ def 
Transform_demo()={ 
//使用sparksession 读取csv文件,此csv文件有表头 
val dataFrame = sparkSession.read.format("com.databricks.spark.csv") 
//有无表头 
.option("header", true)
 //是否自动推断表头类型
 .option("inferSchema", false) 
//分隔符 
.option("delimiter", ",") 
//csv文件的地址 
.csv("date/albums.csv") 
dataFrame 
}

统计各类型专辑的数量

        思路:

        各类型专辑的数量 ==》根据专辑类型(genre)分组,求出专辑类型的总和

        使用spark SQL进行处理

def genre_demo() = {
 //统计各个类型专辑的数量 
val unit = Transform_demo()
.select($"genre") 
.groupBy($"genre")
.count()
.sort($"count".desc)
.show() }

        在Spark SQL中使用group by的时候,提供了group by之后的操作,比如

        max(colNames:String*):获取分组中指定字段或者所有的数字类型字段的最大值,只能作用于数字型字段。

        min(colNames:String*):获取分组字段或者所有的数字类型字段的最小值,只能作用于数字类型的字段。

        mean(colName:String*):获取分组中指定字段或者所有数字类型字段的平均值,只能作用于数据类型的字段

        sum(colNames:String*):获取分组中指定字段或者所有数字类型字段的累加值,只能作用于数字类型的字段

        count():获取分组中的元素个数

        根据genre字段分组后,求出专辑类型的个数,对专辑类型的个数进行排序。如果需要导入到文件里面,那么需要.write。

使用Rdd进行处理

     def genre_demo() = {
 val value = Transform_demo()
.select($"genre") 
.rdd
 .map(v => (v(0), 1))
 .reduceByKey(_ + _)
 .sortBy(_._2,false)

        展示一下上面的流程图把

基于Spark的音乐专辑数据分析

统计各类型专辑的销量总数

思路:

        根据专辑类型分组,分组之后,计算num_of_sales专辑销量总和。

        如果是spark SQL的话,流程应该是这样的。

        dataFrame => select => group by => sum()

        来看一下代码

def countByNum_sales()={
 Transform_demo()
.select($"genre",$"num_of_sales") 
.withColumn("num_of_sales",col("num_of_sales")
 .cast("Integer")) 
.groupBy("genre")
 .sum("num_of_sales") 
.orderBy($"sum(num_of_sales)".desc)
 .show() }

        如果在group by后面直接sum求和,那么是会报错的,因为在最开始的时候,我们并没有让系统自动推断表头的数据类型,默认为String类型,因此需要先转换为整型,然后对其进行操作。

        来看一下RDD的代码

def countByNum_sales()={
 val value = Transform_demo()
.select($"genre", $"num_of_sales") 
.rdd 
.map(v => (v(0).toString, v(1).toString.toInt))
.reduceByKey(_ + _) .sortBy(_._2, false) 
value }

基于Spark的音乐专辑数据分析

统计近20年每年发行的专辑数量和单曲数量

        思路:

        根据年份分组(year_of_pub),求每年发行的专辑数量和单曲数量。

        单曲数量很简单(num_of_tracks)累加,但是专辑数量怎么表示呢?

        注意一下,num_of_tracks字段:每张专辑中的单曲数量,什么意思呢?来看一下这样的表示

        (num_of_tracks,1) =》 (每张专辑的单曲数量,专辑数量)

        这个1就代表着专辑的数量。

        用RDD来理一下思路,(年份,(每张专辑的单曲数量,1)) ==>经过reduceByKey (年份,(每年发行的单曲数量,每年发行的专辑数量))

def Countbytracks() ={
 //统计近20年每年发行的专辑数量和单曲数量;
 //每年发行的单曲数量 num_of_tracks 专辑数量怎么算呢?
 //num_of_tracks: 每张专辑中单曲数量
 //(1张专辑,专辑发行的单曲数量) 
val array = Transform_demo()
.select($"year_of_pub", $"num_of_tracks")
.rdd 
.map(v => (v(0).toString.toInt, (v(1).toString.toInt, 1)))
 .reduceByKey((x, y) => (x._1 + y._1, (x._2 + y._2)))
 .sortByKey() 
array }

来看一下流程图

基于Spark的音乐专辑数据分析

分析总销量前五的专辑类型的各年份销量

        思路:

        首先求出来总销售量前五的专辑类型,然后取前五个数量最多的,之后在这个五个数量最多的专辑类型里面计算每年的销量。

        首先获取总销售量前五的专辑类型

def get_genre() = { 
//先获取总销售量前5的专辑类型 
val array = Transform_demo()
.select($"genre", $"num_of_sales") 
.withColumn("num_of_sales", col("num_of_sales").cast("Integer")) 
.groupBy($"genre")
 .sum("num_of_sales")
 .orderBy($"sum(num_of_sales)".desc) 
.rdd 
.map(v => v(0).toString) 
.take(5) 
array }

        首先更改字段类型,根据销售类型(genre)分组,找到销量最多的销售类型.经过map转换之后取前五个销售类型。

        获取总销量前5的专辑类型的各年份销量

def per_year_sales()={
 val genre_list = get_genre()
 val value = Transform_demo()
.select($"genre", $"year_of_pub", $"num_of_sales")
 .rdd
 .filter(v => genre_list.contains(v(0)) )
 .map(v => ((v(0).toString, v(1).toString), v(2).toString.toInt)) 
.reduceByKey(_ + _)
 value }

        如果单独看上面的代码看不懂,那么来看一下下面的流程图把,一定明明白白。

基于Spark的音乐专辑数据分析

总结

        关于这篇音乐分析项目就到此为止了。

        关于对数据的基本处理已经有了些眉目,接下来就是不断的练习练习。

        之后还有会其它的项目,我们最终的Boss项目就是离线数仓项目的建设。

        最后,希望我的她可以越来越好,天天开心文章来源地址https://www.toymoban.com/news/detail-482369.html

到了这里,关于基于Spark的音乐专辑数据分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • python-大数据分析-基于大数据的QQ音乐数据分析系统设计与实现

    DESIGN DESCRIPTION After hundreds of years of development of digital music market at home and abroad, the total number of music works collected has reached a considerable degree. Faced with such a large number of music works, how to let users hear their favorite music works more conveniently and efficiently is a matter that music platforms must consider, and

    2024年02月03日
    浏览(42)
  • 毕设:《基于hive的音乐数据分析系统的设计与实现》

    启动hadoop图形化界面 启动hive 1、配置免密登录 vim core-site.xml hdfs-site.xml 1、关闭防火墙 2、初始化 3、配置启动用户 4、启动 5、访问 6、配置环境变量方便启动 卸载Centos7自带mariadb 配置文件 初始化表 1、拉取sqoop 2、配置 3、加入mysql的jdbc驱动包 修改yarn-site.xml 重启 1、hive创建数

    2024年02月04日
    浏览(35)
  • 基于Spark的气象数据分析

    研究背景与方案 1.1.研究背景 在大数据时代背景下,各行业数据的规模大幅度增加,数据类别日益复杂,给数据分析工作带来极大挑战。 气象行业和人们 的生活息息相关,随着信息时代的发展,大数据技术的出现为气象数据的发展带来机遇。基于此,本项目使用 Spark 等大

    2024年02月09日
    浏览(51)
  • 基于Spark技术的银行客户数据分析

    申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址 全文共计4672字,阅读大概需要3分钟 大数据实验教学系统 案例:银行客户数据分析 某银行积累有大量客户数据,现希望大数据分析团队使用Spark技术对这些数据进行分析,以期获得有价值的信息。 本案例用

    2024年02月09日
    浏览(42)
  • 大数据期末课设~基于spark的气象数据处理与分析

    目录       一 、项目背景 .......................................... 3       二 、实验环境 .......................................... 3 三 、实验数据来源 ................................... 4 四 、数据获取 .......................................... 5 五 、数据分析 ......................................... 17 六 、数据

    2023年04月09日
    浏览(38)
  • 大数据开源框架之基于Spark的气象数据处理与分析

    Spark配置请看: (30条消息) 大数据开源框架环境搭建(七)——Spark完全分布式集群的安装部署_木子一个Lee的博客-CSDN博客 目录 实验说明: 实验要求: 实验步骤: 数据获取: 数据分析: 可视化: 参考代码(适用于python3): 运行结果:         本次实验所采用的数据,从中

    2024年02月03日
    浏览(43)
  • 基于spark对美国新冠肺炎疫情数据分析

    GCC的同学不要抄袭呀!!!严禁抄袭 有任何学习问题可以加我微信交流哦!bmt1014 前言 2020年美国新冠肺炎疫情是全球范围内的一场重大公共卫生事件,对全球政治、经济、社会等各个领域都产生了深远影响。在这场疫情中,科学家们发挥了重要作用,积极探索病毒特性、传

    2024年02月04日
    浏览(41)
  • Spark内容分享(二十七):阿里云基于 Spark 的云原生数据湖分析实践

    目录 Spark 与云原生的结合 1. 传统 Spark 集群的痛点 2. Spark 与云原生结合的优势 Spark on K8s 原理介绍 1. Spark 的集群部署模式 2. Spark on K8s 的部署架构 3. Spark on K8s 部署架构——对比 4. Spark on K8s 社区进展 5. Spark 3.3 新特性介绍 Spark on K8s 在阿里云 EMR 上的实践 1. EMR Spark on ACK 2. 充分

    2024年01月15日
    浏览(93)
  • 【大数据平台】基于Spark的美国新冠肺炎疫情数据分析及预测

    一、选题背景 新型冠状病毒疫情是由严重急性呼吸系统综合征冠状病毒2(SARS-CoV-2)导致的2019冠状病毒病(COVID-19)所引发的全球大流行疫情。该疾病在2019年末于中华人民共和国湖北省武汉市首次爆发,随后在2020年初迅速扩散至全球多国,逐渐变成一场全球性的大瘟疫。截

    2023年04月19日
    浏览(34)
  • 毕业设计:基于Python网易云音乐数据采集分析可视化系统+分析大屏 Flask框架 (附源码)建议收藏

    [毕业设计]2023-2024年最新最全计算机专业毕设选题推荐汇总 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人 。 随着互联网技术的发展,音乐成为了人们生活中不可或缺的一部分,而网易云音乐作为国内

    2024年02月01日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包