2021年安徽省大数据与人工智能应用竞赛 大数据(网络赛)-高职组赛题

news/2025/9/17 16:45:49/文章来源:https://www.cnblogs.com/beast-king/p/19096760

本套数据数据:
通过网盘分享的文件:
链接: https://pan.baidu.com/s/1ZQXoWQhCOAiGVcFOZozV1g?pwd=json 提取码: json

第二部分:大数据程序编写部分(30分)

任务一、数据抽取转化部分(5分)

1、使用sqoop将MySQL的sakila数据库中的city表中city列以C开头的数据导入到hdfs中,可以使用--where 和 --query两种方式。请根据已有的--where方式导入语句:(2分)

sqoop import  --connect jdbc:mysql://localhost:3306/sakila \
--username root --P  root \
--table city \
--where "city  like 'C%'" \
--target-dir /user/sqoop \
-m 1

请补充--query方式的语句:
答:

sqoop import  --connect jdbc:mysql://localhost:3306/sakila \
--username root -P root \
--query "select * from city where city like 'C%' and \$CONDITIONS" \
--target-dir /user/sqoop \
--delete-target-dir \
-m 1

说明:

  • "\"
    代码中的"\"表示续行,一条命令很长,分多行书写
  • target-dir:
    指定导入时hdfs的路径,必须指定,但无需事先创建,运行时自动创建,如果存在,则可使用参数--delete-target-dir将其删除。

2、请将以下MySQL的demo数据库中的language表以分隔符;导入Hive表h_language中的sqoop语句的缺失部分补充完整。(3分)

sqoop import \
--connect jdbc:mysql://localhost:3306/demo \
--username root \    
--password root\  
--table   ______(1)_______   \ 
--fields-terminated-by______(2)_____  \  
-m 1 \  
--hive-import \  
--hive-database default \ 
--hive-table ______(3)________\ 
--delete-target-dir \ 
--create-hive-table

答:
(1)language
(2) ;
(3)h_language

任务二、Mapreduce程序操作题目(8分)

题目及分析

数据:userPhone.txt,location.txt,calls.txt

数据calls.txt 通话记录
样例:18620192711,15733218050,1506628174,1506628265,650000,810000
字段分别为:
呼叫者手机号,接受者手机号,开始时间戳,结束时间戳,呼叫者地址省份编码,接受者地址省份编码

数据location.txt 地区编码对应表
样例:1,110000,北京市
字段分别为:
地址id,省份编码,省份名称

数据userPhone.txt 是手机号与姓名对应表
样例:26,13799999999,菜中路
字段分别为:
电话ID,电话号码,姓名

注意: 文本的编码为 UTF-8
请根据要求把 通话记录表 转换为 新的格式数据。
要求把 通话记录表 呼叫者手机号,接受者手机号 替换为 姓名,
开始时间与结束时间 转换成时间格式为 yyyy-MM-dd HH:mm:ss,例如2017-03-29 10:58:12;
计算通话时间,并以秒做单位 计算为 通话时间=结束时间-开始时间
将呼叫者地址省份编码,接受者地址省份编码 替换成省份名称

  1. 将电话号码替换成人名 (2分 )
  2. 将拨打、接听电话的时间戳转换成日期 (2分 )
  3. 求出电话的通话时间,以秒做单位 (2分 )
  4. 将省份编码替换成省份名称 (2分 )
  5. 最后数据的样例:
    邓二,张倩,2017-03-29 10:58:12,2017-03-29 10:58:42,30秒,黑龙江省,上海市

解题:

1、在windows上配置本地hadoop运行环境

通过网盘分享的文件:apache-hadoop-3.1.3-winutils-master.zip
链接: https://pan.baidu.com/s/1Q9_JgWQ4fnIJfdnayt3SdQ 提取码: json
配置环境变量:
(1)新建环境变量:
变量名:HADOOP_HOME
变量值:解压后的主目录
(2)hadoop的bin目录path环境变量:%HADOOP_HOME%\bin
测试:
'WIN+R'->'cmd'->'winutils'
出现使用说明,证明hadoop环境没问题。如果出现错误,缺少dll文件,请将bin目录中'hadoop.dll'复制到C:\Windows\System32中。

2、新建maven项目

(1)新建项目
在IDEA中,选择File->New->Project->Maven->...->Finish
(2)配置依赖
pom.xml

 <dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.3</version></dependency></dependencies>

3、新建Mapper类

com.hadoop.mapreduce.calls.CallsMapper.java

点击查看代码
package com.hadoop.mapreduce.calls;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;public class CallsMapper extends Mapper<LongWritable, Text,Text,Text> {Map<String,String> mapPhone =new HashMap<String,String>();//手机号和姓名的映射Map<String,String> mapLocation =new HashMap<String,String>();//位置编码和位置名称的映射//setup()方法中映射后在map()方法中使用@Overrideprotected void setup(Context context) throws IOException, InterruptedException {String line;FileSystem fs=null;//hadoop文件系统try {fs = FileSystem.get(new URI("hdfs://bigdata2021master:9000"), new Configuration());} catch (URISyntaxException e) {e.printStackTrace();}//hdfs上的数据文件所在的路径,事先准备建好Path path1 = new Path("/input/calls/userPhone.txt");FSDataInputStream fsInputStream = fs.open(path1);BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fsInputStream));while ((line=bufferedReader.readLine())!=null){//每次读一行,如:"7,18000696806,赵贺彪"String[] words = line.split(",");mapPhone.put(words[1],words[2]);//手机号和姓名映射}Path path2 = new Path("/input/calls/location.txt");fsInputStream = fs.open(path2);bufferedReader = new BufferedReader(new InputStreamReader(fsInputStream));while ((line=bufferedReader.readLine())!=null){//"1,110000,北京市"String[] words = line.split(",");mapLocation.put(words[1],words[2]);//位置编码和位置名称映射}}@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line=value.toString();//value为map第1阶段读入的一行值,从calls.txt中读String[] words = line.split(",");//由手机号得到姓名String name1= mapPhone.get(words[0]);String name2= mapPhone.get(words[1]);//时间戳转换日期时间,数据文件中时间戳单位应该是秒,需*1000变成毫秒Date time1=new Date(Long.parseLong(words[2])*1000L);Date time2=new Date(Long.parseLong(words[3])*1000L);//变成规范的日期格式SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String t1=simpleDateFormat.format(time1);String t2=simpleDateFormat.format(time2);//时间差(秒),2个时间戳相减String t3=Long.parseLong(words[3])-Long.parseLong(words[2])+"";//由位置编码得位置名称String location1=mapLocation.get(words[4]);String location2=mapLocation.get(words[5]);//姓名拼接作为输出的keyString outKey=name1+","+name2+",";//时间、位置拼接作为输出的valueString outValue="";outValue+=t1+","+t2+","+t3+","+location1+","+location2;System.out.println(outKey+outValue);context.write(new Text(outKey),new Text(outValue));//输出,本题没有reduce阶段。}
}

4、新建驱动类

com.hadoop.mapreduce.calls.CallsDriver.java

点击查看代码
package com.hadoop.mapreduce.calls;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class CallsDriver {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {//配置对象confConfiguration conf = new Configuration();//作业对象jobJob job=Job.getInstance(conf);//设置jar包类,即驱动类(main所在的类)job.setJarByClass(CallsDriver.class);//设置map类job.setMapperClass(CallsMapper.class);//设置map输出键的数据类型job.setMapOutputKeyClass(Text.class);//设置map输出值的数据类型job.setMapOutputValueClass(Text.class);//设置最终输出键的数据类型job.setOutputKeyClass(Text.class);//设置最终输出值的数据类型job.setOutputValueClass(Text.class);//设置数据文件的路径FileInputFormat.setInputPaths(job,new Path("hdfs://bigdata2021master:9000/input/calls/calls.txt"));//设置输出目录的路径,如果存在则要删除FileOutputFormat.setOutputPath(job,new Path("hdfs://bigdata2021master:9000/output/calls/1"));//是否执行完毕boolean result = job.waitForCompletion(true);System.exit(result?0:1);//0表示正常退出,其他表示异常退出}
}

5、打包运行

(1)maven打包
IDEA打开右侧Maven窗口,选择"项目名"->"lifeCycle"->双击"package",完成后,在项目中"target"目录中就会出现jar包。如:"target/hadoop-1.0-SNAPSHOT.jar"。
(2)在hdfs创建目录和上传数据文件
数据文件要先传到linux
hdfs dfs -mkdir -p /input/calls
hdfs dfs -mkdir -p /output/calls
hdfs dfs -put userPhone.txt /input/calls/
hdfs dfs -put location.txt /input/calls/
hdfs dfs -put calls.txt /input/calls/
(3)运行jar包
hadoop jar hadoop-1.0-SNAPSHOT.jar com.hadoop.mapreduce.calls.CallsDriver
(4)查看结果
hdfs dfs -ls -R /output
hdfs dfs -cat /output/calls/1/part-r-00000
如果要再次运行,请在hdfs上删除"1"这个目录
(5)截图
image

image

image

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

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

相关文章

一些写了和没写的数学!

P8114 [Cnoi2021] 六边形战士 传送 非常好玩的题! 首先你大概率看过一些“无字证明”,其中很经典的是这个: 证明:用若干个边长为 \(1\),顶角为 \(60\) 度的菱形拼成一个边长为 \(n\) 的正六边形,三个方向的菱形个数一定相等。这是一个经典的无字证明,虽然前置的说明要费…

【光照】[自发光Emission]以UnityURP为例

【从UnityURP开始探索游戏渲染】专栏-直达自发光的基本原理 $Cemissive=Memissive$ 自发光是物体表面主动发射光线的现象,在光照模型中通常作为独立于外部光源的附加项。其核心特点是不受其他光照影响,但可以影响周围环境。 实现流程‌定义发射颜色和强度‌:确定基础发光颜色…

mybatis-plus初体验,解决报错Invalid value type for attribute factoryBeanObjectType: java.lang.String

解决报错Invalid value type for attribute factoryBeanObjectType: java.lang.String 推荐这位大佬的博客: https://www.cnblogs.com/muphy/p/18653627 项目结构MyBatis-Plus配置类MyBatisPlusConfig package com.example.config;import com.baomidou.mybatisplus.annotation…

Alexandresku设计的loki小对象内存分配器

Loki是由 Alexandresku 编写的一个与《Modern C++ Design》(C++设计新思维)一书配套发行的C++代码库。其中有两个文件 SmallObj.h 、SmallObj.cpp 进行内存管理,可以单独进行使用 三个class,第一层是chunk,第二层是vector<chunk> FixedAllocator,第三层是vector&l…

C++ 内存管理

C++ 内存管理是程序设计的核心环节,直接影响程序的性能、稳定性和安全性。C++ 不像 Java、Python 等语言有自动垃圾回收机制,而是需要开发者手动管理动态内存(或通过智能指针等机制自动管理)。 1、C++ 内存分区内存区域 存储内容 生命周期 管理方式栈 (Stack) 函数参数、局…

浅谈制氢电源及英飞凌解决方案

大家对氢元素肯定都不陌生,认识它基本都是从背元素周期表开始的。近年来我们身边多了很多氢的身影,从北京冬奥会的氢燃料电池大巴,再到广州南沙小虎岛电氢智慧能源站,氢也越来越被大家熟知。工业上,氢的使用可是一点都不少,自 1975 年以来,需求量增长了三倍,而且还在继…

微算法科技(NASDAQ:MLGO)研究分布式量子计算,释放量子计算潜能

在信息时代,数据量呈指数级增长,经典计算机面临算力瓶颈。量子计算以其超强的并行处理能力,被视为下一世代计算范式的颠覆者。然而,单个量子处理器的脆弱性和制造难度限制了其广泛应用。微算法科技(NASDAQ:MLGO)研发团队研究通过分布式量子计算模型,将多个量子计算节点连…

AI 重塑招聘三角:Moka 招聘智能体如何实现 HR、候选人与企业的三方共赢

AI 重塑招聘三角:Moka 招聘智能体如何实现 HR、候选人与企业的三方共赢在人才竞争进入白热化的今天,招聘早已不是 HR 单方面的 “筛选任务”,而是涉及 HR 效率、候选人体验、企业战略人才储备的三角关系。传统招聘模式下,这三角常常陷入 “HR 疲于奔命却难出成果、候选人等…

Flash Attention原理

提出问题 Transformer 结构已成为自然语言处理和图像分类等应用中最常用的架构。尽管 Transformer 在规模上不断增大和加深,但处理更长上下文仍然是一个挑战,因为核心的自注意力模块在序列长度上具有二次方的时间和内存复杂度。这导致在处理长序列时速度变慢且内存需求巨大。…

MSMQ 跨服务器读写队列的“消息队列系统的访问被拒绝”的解决方案

转:http://m.blog.csdn.net/blog/2000killer/8904852 在服务器上创建的Queue开发者的 机器只能写数据而不能读数据。.net给出的错误是“对消息队列系统的访问被拒绝”,也就是说拒绝访问队列没有相关权限,我给Everyone和 ANONYMOUS LOGON赋予全部权限都无法解决(正常情况下可…

Linux时间同步---NTP时间同步方案

1.方案背景: 在分布式系统或多服务器集群中,必须建立统一的时间同步机制。服务器间的时间不一致会破坏各类依赖时间交互逻辑,例如导致日志时序混乱、事务顺序错乱、证书验证失败等,从而引发一系列难以排查的不可预知故障。 2.NTP同步网络拓扑图: 3.同步方案 可提前咨询医…

java预习

课前问题列表 1.什么样的方法应该用static修饰?不用static修饰的方法往往具有什么特性?Student的getName应该用static修饰吗?适合用 static 修饰的方法: 工具类方法(如Math.abs())、工厂方法、不需要访问实例变量 / 方法的方法、单例模式的获取实例方法等,这类方法通常与…

B/S体系结构风格

三层B/S风格-概述 》浏览器/服务器(B/S)风格就是上述三层应用结构的一种实现方式,其具体结构为:浏览器/Web服务器/数据库服务器。 》B/S体系结构主要是利用不断成熟的WWW浏览技术,结合浏览的多种脚本语言,用通用浏览器就实现了原来需要复杂的专用软件才能实现的强大功能,…

The 2024 CCPC Online Contest 7/12 L/B/K/D/J/E/C

Problem L. 网络预选赛 签到,直接模拟即可点击查看代码 #include<bits/stdc++.h> using namespace std; int main(){int n,m;cin>>n>>m;vector<string>a(n);for(int i=0;i<n;i++){cin>>a[i];}int sum=0;for(int i=0;i<n-1;i++){for(int j…

在joule里面使用agent 功能

test: Dev: 1: structure 2: 本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

Feign动态URL配置

方式一、亲测可用,缺点是每个类都需要单独配置@FeignClient(value = "my-biz", url = "${external.my.biz_url}", configuration = FeignHeaderInterceptor.class) public interface MyBizFeign {}@Data @Component @RefreshScope @ConfigurationProperti…

自动化部署工具 Jenkins 的安装与配置

Jenkins 是一个开源的自动化部署工具,广泛用于持续集成(CI)和持续交付(CD)流程。它支持自动化构建、测试和部署应用程序。以下是 Jenkins 的安装与配置的详细教程。1. 安装 Jenkins 以下步骤适用于 Linux 系统(以 Ubuntu 和 CentOS 为例),并包含安装必要的依赖环境。1.…

pip 搭建源

搭建本地pip源主要可通过pypiserver、pip2pi或bandersnatch等工具实现,具体步骤如下: 工具选择与安装‌pypiserver‌:轻量级方案,适合快速搭建小型私有源,通过pip install pypiserver安装 ‌pip2pi‌:适合按需构建源,从requirements.txt生成索引,需配合pip install pip…

qoj10093 Jump the Frog

题意 给出 \(n\) 个由 O 和 ~ 组成的字符串 \(s_i\),还有 \(m\) 个额外字符串,第 \(n+i\) 个字符串 \(s_{n+i}\) 由第 \(s_x\) 和 \(s_y\) \((x,y<n+i)\) 个字符串拼接得到,即 \(s_{n+i}=s_x+s_y\)。你需要对这 \(n+m\) 个字符串解决以下问题: 有一只青蛙从字符串的起点…

new 和make

func NewCase() {// 通过new , 可以创建任意类型,并返回指针mpPtr := new(map[string]*user)if *mpPtr == nil { // 通过 * 获取指针内容fmt.Println("map 为空")}// sliceslicePtr := new([]user)if *slicePtr == nil {fmt.Println("slice 为空")}*sliceP…