【Hadoop】YouTube 视频数据集分析实验 (原理+过程+代码)

一、实验背景

随着近年来视频拍摄设备与视频处理技术的高速发展,对网络上海量视频的分析越来越受到关注与重视。本实验希望通过使用 Hadoop 实验数据集 —— Dataset for "Statistics and Social Network of YouTube Videos" 进行简明的分析实验,从而加深对大数据分析的体会与认识、对 Hadoop、MapReduce 等的理解与应用。  


二、实验目的

本实验将在虚拟机上 (CentOS 7.5 64bits),基于 Hadoop 2.7.5 (64bits),使用 MapReduce 实现对部分 YouTube 视频数据集的分析,以统计出某一时期内 YouTube 用户已上传视频类型的总数量,并对可视化后的结果进行简要的比较与分析。


三、实验过程

3.1 数据集预处理与上传

本实验所用的 YouTube 数据集下载自 School of Computing Science Simon Fraser University。数据集中,每行都代表一条用户上传视频数据,每行中各字段由 Tab 字符 ('\t') 分隔开,各字段含义按顺序如下表所示:

部分数据集如下所示。其中,每行数据从左往右依次表示:video ID、uploader、age、category、length、views、rate、ratings、comments、related IDs。而本实验所关心的、将使用到的是 category 这项 (蓝框)。

 实验所用的数据集采样自2007年2月22至5月18日中的35天的YouTube用户上传视频信息。由于下载得到的数据集共有35个压缩包(解压后是4-5个txt文本),对应35天的采样数据,为此,我们需要先在本地主机上合并它们。合并方法有很多种,此处将主要描述方法一,概述方法二。

3.1.1 合并数据集——方法一

先把解压后的所有txt数据文本放置在桌面的DataforUpload文件夹中,然后打开命令行程序,按路径 cd 进入DataforUpload文件夹,执行 copy *.* all.txt 对文件夹下所有数据文本执行复制合并的批处理操作,生成汇总数据集文件 all.txt 共计895.5MB,含数据约一百万条以上,如下所示:

然后连接VPN,登陆虚拟机,运行Hadoop进程,再使用upload程序(见附录)将本地的数据集all.txt上传至HDFS的 "/hadoop2/videoinput2/" 路径下。通过 HDFS Web UI 验证文件上传成功,如下所示:

3.1.2 合并数据集方法二

可以先将本地的含有所有分散文本数据的 DataforUpload 文件夹上传至 HDFS (的hadoop2/inputVideo1/ 路径下),再使用hdfs dfs -getmerge <源

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在Hadoop集群上安装Spark,并将数据集上传到HDFS中。 接着,使用Spark的API对数据集进行分析。具体步骤如下: 1. 加载数据集并转换为RDD格式 ```scala val data = sc.textFile("hdfs://path/to/dataset") ``` 2. 数据预处理:清洗、过滤、转换等 ```scala val cleanData = data.filter(line => !line.isEmpty && line.split(",").length == 4) val transformedData = cleanData.map(line => { val parts = line.split(",") (parts(0), parts(1), parts(2).toInt, parts(3)) }) ``` 3. 计算每个用户的总消费金额 ```scala val userTotalAmount = transformedData.map { case (user, _, amount, _) => (user, amount) }.reduceByKey(_ + _) ``` 4. 计算每个用户的平均消费金额 ```scala val userAvgAmount = transformedData.map { case (user, _, amount, _) => (user, (amount, 1)) }.reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2)) .mapValues(x => x._1 / x._2) ``` 5. 计算每个商品的总销售量和总销售额 ```scala val productSales = transformedData.map { case (_, product, amount, _) => (product, (amount, 1)) }.reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2)) val productRevenue = transformedData.map { case (_, product, amount, price) => (product, amount * price.toDouble) }.reduceByKey(_ + _) ``` 6. 输出结果 ```scala userTotalAmount.saveAsTextFile("hdfs://path/to/output/userTotalAmount") userAvgAmount.saveAsTextFile("hdfs://path/to/output/userAvgAmount") productSales.saveAsTextFile("hdfs://path/to/output/productSales") productRevenue.saveAsTextFile("hdfs://path/to/output/productRevenue") ``` 以上是基于Spark对数据集进行简单分析的步骤,可以根据需要进行进一步的数据处理和分析

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值