2023国赛中职组大数据应用与服务赛项题库参考答案陆续更新(高职大数据 国赛)

新闻资讯2024-08-09 22:23小乐

2023国赛中职组大数据应用与服务赛项题库参考答案陆续更新(高职大数据 国赛)

题号:试题01 模块2:数据采集与处理(一) 任务1:数据采集与清洗1、子任务1:数据采集

启动Hadoop集群,使用HDFS Shell命令在HDFS根目录下级联创建名为/behavior/origin_log的目录,用于存储收集的用户行为日志;答案:hadoop fs -mkdir -p /behavior/origin_log

目录创建完成。使用HDFS Shell命令将本地/root/eduhq/data/app_log/behavior目录下的所有用户行为日志文件收集到HDFS /behavior/origin_log目录下;答案:hadoop fs -put /root/eduhq /data/app_log/behavior/* /behavior/origin_log

采集完成后,在本机打开浏览器,访问http://本地主机名:9870或http://本地IP地址:9870进入HDFS WebUI界面,查看数据是否已成功采集到HDFS。答:使用浏览器访问即可。

2. 子任务2:数据清理

在Windows操作系统上使用Excel软件打开名为“behavior2023-01-01.csv”的文件;

清理数据并关注名为“behavior2023-01-01.csv”的文件中的“时间”列。将时间和日期格式分为两列:日期和时间。回答:

(2)任务二:数据标注开发:开发一个简单的Java类IpToLocUdf,继承

org.apache.hadoop.hive.ql.udf.generic.GenericUDF,重载了initialize()、evaluate()和getDisplayString()方法;该类需要通过IP实现从/root/eduhq/data/area.json文件中随机获取“省”和“城市”信息,完成数据的分类和标注。

答案:导入org.apache.hadoop.hive.ql.exec.UDFArgumentException;

导入org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;

导入org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;

导入org.apache.hadoop.hive.ql.metadata.HiveException;

导入org.apache.hadoop.hive.ql.udf.generic.GenericUDF;

导入org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;

导入org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;

导入org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector;

导入org.codehaus.jackson.JsonNode;

导入org.codehaus.jackson.map.ObjectMapper;

导入org.codehaus.jackson.node.ObjectNode;

导入java.io.File;

导入java.io.IOException;

导入java.util.ArrayList;

导入java.util.List;

公共类IpToLocUdf 扩展GenericUDF {

私有StringObjectInspector stringInspector;

私有ObjectInspector 输出OI;

//初始化函数,用于设置函数参数和输出类型

/*

该初始化方法的主要作用是验证输入参数的数量和类型,并将输出类型设置为字符串。

如果输入的参数不符合要求,则会抛出异常。

最后,它返回一个输出类型的ObjectInspector 供其他方法使用。

*/

@覆盖

公共ObjectInspector 初始化(ObjectInspector []参数)抛出UDFArgumentException {

//检查参数个数是否为1,如果不是则抛出异常

if (arguments.length !=1) {

抛出新的UDFArgumentLengthException(

'函数iptoloc(ip) 只接受1 个参数。');

}

//检查第一个参数是否为StringObjectInspector类型,如果不是则抛出异常

if (!(arguments[0] StringObjectInspector 实例)) {

抛出新的UDFArgumentTypeException(0,

'参数必须是字符串,但是' + argument[0].getTypeName()

+ '已给出。');

}

//将第一个参数设置为字符串类型的ObjectInspector

this.stringInspector=(StringObjectInspector) 参数[0];

//设置输出类型为string,并通过反射创建ObjectInspector实例

this.outputOI=ObjectInspectorFactory.getReflectionObjectInspector(String.class,

ObjectInspectorFactory.ObjectInspectorOptions.JAVA);

//打印输出类型的ObjectInspector信息

System.out.println(outputOI);

返回输出OI; //返回输出类型的ObjectInspector以供其他方法使用

}

@覆盖

公共对象评估(DeferredObject []参数)抛出HiveException {

//获取传入的IP地址参数

String ip=stringInspector.getPrimitiveJavaObject(arguments[0].get());

//从指定文件中读取区域信息

//文件file=new File('/root/eduhq/data/area.json');

文件file=new File('/resources/area.json');

ObjectMapper 映射器=new ObjectMapper();

列出省份=new ArrayList();

列出城市=new ArrayList();

尝试{

//解析JSON文件

JsonNode rootNode=mapper.readTree(file);

//遍历JSON节点获取省市信息

for (JsonNode 节点: rootNode) {

String Province=node.path('province').getTextValue();

String city=node.path('city').getTextValue();

省份.add(省份);

城市.add(城市);

}

} catch (IOException e) {

throw new HiveException('无法读取area.json file:' + e.getMessage(), e);

}

//根据IP地址进行分类和标签

int 索引=ipToIndex(ip);

字符串省份=Provinces.get(index);

字符串城市=城市.get(索引);

//返回分类标注结果

ObjectNode结果=mapper.createObjectNode();

result.put('省份', 省份);

结果.put('城市', 城市);

返回结果.toString();

}

@覆盖

公共字符串getDisplayString(String[] 儿童) {

返回'iptoloc(' + Children[0] + ')';

}

私有int ipToIndex(字符串ip) {

//根据IP地址的某种算法得到索引值

//这里我们简单的使用IP地址的字符长度模拟算法

返回ip.length() % 7;

}

}

org.apache.hive

hive 执行程序

3.1.2

(三)任务三:数据统计1、子任务一:HDFS文件上传下载

(1)将包“com.hive.udf”导出为名为hive-udf-behavior-1.0.0.jar的JAR文件并保存在本地

/root/eduhq/udf_jars 目录;

答案:https://blog.csdn.net/gb4215287/article/details/132793531

(2)将打包后的文件hive-udf-behavior-1.0.0.jar上传到HDFS的/hive/udf_jars目录下;

答案:hadoop fs -put hive-udf-behavior-1.0.0.jar /hive/udf_jars

(3)在Hive客户端中,创建永久函数url_trans和get_city_by_ip,并与开发的类关联起来;

答案:添加jar /root/eduhq/udf_jars/hive-udf-behavior-1.0.0.jar

创建函数url_trans 作为com.hive.udf.url_trans;

创建函数get_city_by_ip 为com.hive.udf.get_city_by_ip;

(4)在Hive客户端上,使用select语句测试url_trans和get_city_by_ip函数;

答:根据具体功能使用。例如:

选择get_city_by_ip(ip);

(5)启用Hive的动态分区功能,并将Hive设置为非严格模式;

答案:设置hive.exec.dynamic.partition=true;

设置hive.exec.dynamic.partition.mode=nostrict;

(6)使用insert overwrite . select .子句将ods_behavior_log表中的数据插入到分区表dwd_behavior_log中,实现基于dt的动态分区。

答案:插入覆盖表dwd_behavior_log PARTITION (dt) select *,date_format(dt,'yyyy-MM-dd') from ods_behavior_log;

2. 子任务2:数据统计

查看dwd_behavior_log表所有现有分区;答案:显示分区dwd_behavior_log;

查看外部表dwd_behavior_log中前3行数据,验证URL协议是否统一为“http”,是否可以通过IP获取“省”和“城市”信息;答案:SELECT * FROM dwd_behavior_log LIMIT 3;

从dwd_behavior_log 选择URL,其中URL 类似于“http://%”;

返回以“http://”开头的所有URL。如果返回的行数大于0,则说明URL协议统一为“http”。

通过ip获取省份,例如: select get_city_by_ip(ip);

统计外部表dwd_behavior_log的数据总行数。答案:从dwd_behavior_log 中选择COUNT(*);

获取更多资讯,请联系

武汉微众智能创新科技有限公司

了解更多信息请登录www.whwzzc.com,咨询电话13037102709

*本资料中的产品图片和技术数据仅供参考,如有更新,恕不另行通知。微众保留对具体内容的解释权。

猜你喜欢