头歌:旅游网站之数据分析

第1关 统计每个城市的宾馆平均价格

package com.processdata;import java.io.IOException;
import java.util.Scanner;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.mapreduce.TableMapper;
import org.apache.hadoop.hbase.mapreduce.TableReducer;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;import com.util.HBaseUtil;/*** 使用MapReduce程序处理HBase中的数据并将最终结果存入到另一张表 1中*/
public class HBaseMapReduce extends Configured implements Tool {public static class MyMapper extends TableMapper<Text, DoubleWritable> {public static final byte[] column = "price".getBytes();public static final byte[] family = "hotel_info".getBytes();@Overrideprotected void map(ImmutableBytesWritable rowKey, Result result, Context context)throws IOException, InterruptedException {/********** Begin *********///获取酒店价格String cityId = Bytes.toString(result.getValue("cityIdInfo".getBytes(),"cityId".getBytes()));byte[] value = result.getValue(family,column);//将价格转换为double Double hotel = Double.parseDouble(Bytes.toString(value));//将价格转化成()类型DoubleWritable i = new DoubleWritable(hotel);String key = cityId; //写出城市(id,酒店价格)context.write(new Text(key),i);// String cityId = Bytes.toString(result.getValue("cityInfo".getBytes(), "cityId".getBytes())); // byte[] value = result.getValue(family, column);// //获取酒店价格// //String cityId1 = Bytes.toString(result.getValue("hotel_info".getBytes(), "price".getBytes())); // //将价格转换为double// Double ho =Double.parseDouble(Bytes.toString(value));// //将价格转换成()类型// DoubleWritable i = new DoubleWritable(ho);// String key = cityId;// //写出(城市id,酒店价格)// context.write(new  Text(key),i);/********** End *********/}}public static class MyTableReducer extends TableReducer<Text, DoubleWritable, ImmutableBytesWritable> {@Overridepublic void reduce(Text key, Iterable<DoubleWritable> values, Context context) throws IOException, InterruptedException {/********** Begin *********/double sum = 0;int count = 0;  for (DoubleWritable num:values){ count++; sum += num.get();  }double avePrice = sum / count;  Put put = new Put(Bytes.toBytes(key.toString()));  put.addColumn("average_infos".getBytes(),"price".getBytes(),Bytes.toBytes(String.valueOf(avePrice)));  context.write(null,put);//initTableReducerJob 设置了表名所以在这里无需设置了// double sum=0;// int count=0;// for(DoubleWritable value:values){//     count++;//     sum+=value.get();// }// double avePrice=sum/count;// //创建pit对象// Put put =new Put(Bytes.toBytes(key.toString()));// put.addColumn("average_infos".getBytes(),"price".getBytes(),Bytes.toBytes(String.valueOf(avePrice)));// context.write(null,put);        /********** End *********/}}public int run(String[] args) throws Exception {//配置JobConfiguration conf = HBaseConfiguration.create(getConf());conf.set("hbase.zookeeper.quorum", "127.0.0.1");  //hbase 服务地址conf.set("hbase.zookeeper.property.clientPort", "2181"); //端口号Scanner sc = new Scanner(System.in);String arg1 = sc.next();String arg2 = sc.next();//String arg1 = "t_city_hotels_info";//String arg2 = "average_table";try {HBaseUtil.createTable("average_table", new String[] {"average_infos"});} catch (Exception e) {// 创建表失败e.printStackTrace();}Job job = configureJob(conf,new String[]{arg1,arg2});return job.waitForCompletion(true) ? 0 : 1;}private Job configureJob(Configuration conf, String[] args) throws IOException {String tablename = args[0];String targetTable = args[1];Job job = new Job(conf,tablename);Scan scan = new Scan();scan.setCaching(300);scan.setCacheBlocks(false);//在mapreduce程序中千万不要设置允许缓存//初始化Mapreduce程序TableMapReduceUtil.initTableMapperJob(tablename,scan,MyMapper.class, Text.class, DoubleWritable.class,job);//初始化ReduceTableMapReduceUtil.initTableReducerJob(targetTable,        // output tableMyTableReducer.class,    // reducer classjob);job.setNumReduceTasks(1);return job;}
}

第2关 统计酒店评论中词频较高的词

package com.processdata;
import java.io.IOException;
import java.util.List;
import java.util.Scanner;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.mapreduce.TableMapper;
import org.apache.hadoop.hbase.mapreduce.TableReducer;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import org.apdplat.word.WordSegmenter;
import org.apdplat.word.segmentation.Word;
import com.util.HBaseUtil;
import com.vdurmont.emoji.EmojiParser;/*** 词频统计**/
public class WorldCountMapReduce extends Configured implements Tool {public static class MyMapper extends TableMapper<Text, IntWritable> {private static byte[] family = "comment_info".getBytes();private static byte[] column = "content".getBytes();@Overrideprotected void map(ImmutableBytesWritable rowKey, Result result, Context context)throws IOException, InterruptedException {/********** Begin *********/// String content = Bytes.toString(result.getValue("comment_info".getBytes(),"content".getBytes()));// byte[] content = result.getValue(family,column);// if(content != null && content.isEmpty()){//     content=EmojiParser.removeAllEmojis(content);//     List<Word> words = WordSegmenter.seg(content);//     IntWritable intWritable = new IntWritable(1);//     for (Word word : words) {//         Text text = new Text(word.getText());//         //5、写入到context//         context.write(text,intWritable);//     } // }byte[] value = result.getValue(family, column);String word = new String(value,"utf-8");if(!word.isEmpty()){String filter = EmojiParser.removeAllEmojis(word);List<Word> segs = WordSegmenter.seg(filter);for(Word cont : segs) {Text text = new Text(cont.getText());IntWritable v = new IntWritable(1);context.write(text,v);}}/********** End *********/}}public static class MyReducer extends TableReducer<Text, IntWritable, ImmutableBytesWritable> {private static byte[] family =  "word_info".getBytes();private static byte[] column = "count".getBytes();@Overridepublic void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {/********** Begin *********///1.统计每一个分词的次数// int count = 0;// for (IntWritable value:values){//     count +=value.get();// }// //2.构建一个v3 是put  RowKey: 分词// Put put = new Put(Bytes.toBytes(key.toString()));// //添加列// put.addColumn(family,column,Bytes.toBytes(coumt));// //3.把k3,v3 写入到context// context.write(null,put);int sum = 0;for (IntWritable value : values) {sum += value.get();}Put put = new Put(Bytes.toBytes(key.toString()));put.addColumn(family,column,Bytes.toBytes(sum));context.write(null,put);/********** End *********/}}public int run(String[] args) throws Exception {//配置JobConfiguration conf = HBaseConfiguration.create(getConf());conf.set("hbase.zookeeper.quorum", "127.0.0.1");  //hbase 服务地址conf.set("hbase.zookeeper.property.clientPort", "2181"); //端口号Scanner sc = new Scanner(System.in);String arg1 = sc.next();String arg2 = sc.next();try {HBaseUtil.createTable("comment_word_count", new String[] {"word_info"});} catch (Exception e) {// 创建表失败e.printStackTrace();}Job job = configureJob(conf,new String[]{arg1,arg2});return job.waitForCompletion(true) ? 0 : 1;}private Job configureJob(Configuration conf, String[] args) throws IOException {String tablename = args[0];String targetTable = args[1];Job job = new Job(conf,tablename);Scan scan = new Scan();scan.setCaching(300);scan.setCacheBlocks(false);//在mapreduce程序中千万不要设置允许缓存//初始化Mapper Reduce程序TableMapReduceUtil.initTableMapperJob(tablename,scan,MyMapper.class, Text.class, IntWritable.class,job);TableMapReduceUtil.initTableReducerJob(targetTable,MyReducer.class,job);job.setNumReduceTasks(1);return job;}}

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

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

相关文章

线扫相机品牌汇总(国外+国内)

线扫相机品牌汇总(国外+国内) 行者 ​ 热爱生活 22 人赞同了该文章 线扫相机也叫做线阵相机,和面阵相机一样,都是重要的工业相机。 线扫相机正如其名字那样,拍照时像扫描一样,相机和被拍照物体有相对匀速运动。 Perhaps the most common example of line scan imagin…

vue3 封装一个按钮组件(可自定义按钮样式)

效果图 鼠标悬浮有对应的文字提示&#xff0c;且图标出现背景色和颜色 实现 目前提供五个固定样式的图标及三个用户自定义的图标&#xff0c;可根据需要补充 组件代码 <script setup lang"ts"> import { onMounted, PropType, reactive, ref, watch } from v…

JavaScript:字符串的相关方法

字符串的相关方法: 字符串的所有实例方法&#xff0c;都可以通过基本数据类型字符串去调用 字符串其本质就是一个字符数组 str.length 获取字符串的长度 str[index] 获取指定位置的字符 // 创建一个字符串var str Hello; //[H,e,l,l,o]// str[0] c;// console.log(str.l…

微创新与稳定性的权衡

之前做过一个项目&#xff0c;业务最高峰CPU使用率也才50%&#xff0c;是一个IO密集型的应用。里面涉及一些业务编排&#xff0c;所以为了提高CPU使用率&#xff0c;我有两个方案&#xff1a;一个是简单的梳理将任务可并行的采用并行流、额外线程池等方式做并行&#xff1b;另外…

Android14之解决刷机报错:Can not load Android system. Your data may be corrupt(一百七十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

后端程序员开发win小工具(未完待续)

github&#xff1a;https://gitee.com/forgot940629/win-tool-demo 本地启动&#xff0c;查看http://127.0.0.1:8080/form 场景 在日常工作中可能需要后端开发者开发一些辅助工具。这些辅助工具通常希望能想其他软件一样在桌面系统运行&#xff0c;并且有一些桌面应用的基本…

Unity组件开发--短连接HTTP

1.网络请求管理器 using LitJson; using Cysharp.Threading.Tasks; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using UnityEngine.Events;using System.Web; using System.Text; using Sy…

Spring事务(2):声明式事务管理案例-转账(xml、注解)

1 编写转账案例&#xff0c;引出事务管理问题 需求&#xff1a;账号转账&#xff0c;Tom账号取出1000元&#xff0c;存放到Jack账号上 1.1 建表脚本&#xff08;MySQL&#xff09; CREATE TABLE t_account (id INT(11) NOT NULL AUTO_INCREMENT,name VARCHAR(20) NOT NULL,m…

Qt QLabel标签控件

文章目录 1 属性和方法1.1 文本1.2 对齐方式1.3 换行1.4 图像 2. 实例2.1 布局2.2 为标签添加背景色2.3 为标签添加图片2.4 代码实现 QLabeI是Qt中的标签类&#xff0c;通常用于显示提示性的文本&#xff0c;也可以显示图像 1 属性和方法 QLabel有很多属性&#xff0c;完整的可…

学习笔记 | Activiti7

什么是工作流&#xff1f; 业务流程。 举个例子: 假设有一个在线博客平台&#xff0c;我们要让一篇新的文章从作者的头脑里发表出来。整个过程可以分为以下几个步骤&#xff1a; 创建文章草稿 &#xff1a;作者登录博客平台&#xff0c;点击“写新文章”的按钮&#xff0c…

实习学习总结(2023-12-14---2024-1-08)

CS汉化 首先下载CSagent&#xff0c;百度网盘中有 按照如下放置目录 使用出现中文乱码 插件使用乱码主要跟cs客户端加载没有指定UTF-8编码有关 指定编码的字符&#xff1a;-Dfile.encodingUTF-8 上面的字段添加到启动脚本里面即可&#xff0c;如&#xff1a; java -Dfile.e…

与AI合作 -- 写一个modern c++单例工厂

目录 前言 提问 bard给出的答案 AI答案的问题 要求bard改进 人类智能 AI VS 人类 前言 通过本文读者可以学到modern C单例模式工厂模式的混合体&#xff0c;同时也能看到&#xff1a;如今AI发展到了怎样的智能程度&#xff1f;怎样让AI帮助我们快速完成实现头脑中的想法&…

【Linux】Ubuntu 22.04 上安装最新版 Nextcloud Hub 7 (28.0.1)

在 Ubuntu 22.04 上安装 PHP 版本 安装多个 PHP 版本的最简单方法是使用来自 Debian 开发人员 Ondřej Sur 的 PPA。要添加此 PPA,请在终端中运行以下命令。如果要从 PPA 安装软件,则需要 software-properties-common 包。它会自动安装在 Ubuntu 桌面上,但可能会在您的 Ubuntu…

进阶分布式链路追踪

另外我的新书RocketMQ消息中间件实战派上下册&#xff0c;在京东已经上架啦&#xff0c;目前都是5折&#xff0c;非常的实惠。 https://item.jd.com/14337086.html​编辑https://item.jd.com/14337086.html “RocketMQ消息中间件实战派上下册”是我既“Spring Cloud Alibaba微…

读元宇宙改变一切笔记03_元素(下)

1. 元素2&#xff1a;3D&#xff0c;互联网的下一个伟大迈进 1.1. 3D的必要性不仅仅是因为它预示着新事物的出现 1.1.1. 为了使人类文化和劳动实现从物理世界向数字世界的过渡&#xff0c;必须借助3D环境 1.2. 用户通过几乎源源不断的高分辨…

JVM工作原理与实战(十):类加载器-Java类加载器

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、介绍 二、扩展类加载器 三、通过扩展类加载器去加载用户jar包 1.放入/jre/lib/ext下进行扩展 2.使用参数进行扩展 四、应用程序类加载器 总结 前言 ​JVM作为Java程序的运行…

LeetCode 每日一题 2024/1/1-2024/1/7

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 1/1 1599. 经营摩天轮的最大利润1/2 466. 统计重复个数1/3 2487. 从链表中移除节点1/4 2397. 被列覆盖的最多行数1/5 1944. 队列中可以看到的人数1/6 2807. 在链表中插入最…

Python——运算符

num 1 num 1 print("num1:", num) num - 1 print("num-1:", num) num * 4 print("num*4:", num) num / 4 print("num/4:", num) num 3 num % 2 print("num%2:", num) num ** 2 print("num**2:", num) 运行结果…

实验五:动态路由配置

实验五&#xff1a;动态路由配置 1.RIP 配置 【实验名称】 RIP 路由协议配置 【实验目的】掌握路由器 RIP 路由协议的基本配置 【实验设备】路由器&#xff08; 2 台&#xff09;、计算机&#xff08; 2 台&#xff09;、配置电缆&#xff08; 1 根&#xff09;、 V…

【Linux Shell】10. 函数

文章目录 【 1. 函数的定义 】【 2. 函数参数 】 【 1. 函数的定义 】 所有函数在使用前必须定义 。这意味着必须将函数放在脚本开始部分&#xff0c;直至shell解释器首次发现它时&#xff0c;才可以使用。 调用函数仅使用其函数名即可 。 函数返回值在调用该函数后通过 $? 来…