读取hive表中的数据进行数据可视化

这篇具有很好参考价值的文章主要介绍了读取hive表中的数据进行数据可视化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1,目的

2,hive中的操作

2.1创建数据库

2.2,建表并导入数据

2.3,提取需要的数据

2.4,创建新的表并导入上一步所得数据

3,开发web项目

3.1,创建maven的web项目,并导入依赖

3.2,Util工具包

3.3,pojo层

3.4,dao层

3.5,service层

3.6,control层

3.7,配置web.xml

3.8,html页面

4,页面显示


1,目的

将数据导入到hive中,通过数据分析后将结果存到新的表中,然后读取hive中的数据进行数据可视化。需要项目所需jar包,json文件和js文件以及数据可以关注我的微信公众号大太阳花花公主,在后台回复hive即可。​​​​​​​ 

2,hive中的操作

首先将数据上传到HDFS,然后启动hive,如果因为namenode处于安全模式而无法启动hive可参考我的另一篇博文:

“Name node is in safe mode”的解决方法_大太阳花花公主的博客-CSDN博客

2.1创建数据库

create database nybikedb;

2.2,建表并导入数据

注意在创建表之前需要先使用数据库,即use nybikedb;

创建表:

create table tb_trip_06(tripduration int,starttime string,stoptime
string,start_station_id int,start_station_name string,start_station_latitude
double,start_station_longitude double,stop_station_id int,stop_station_name
string,stop_station_latitude double,stop_station_longitude double,bikeid
int,usertype string,birth_year int,gender int) row format delimited fields
terminated by ',';

导入数据:

load data inpath 'hdfs://hadoop:9000/201906.csv' overwrite into table
tb_trip_06;

2.3,提取需要的数据

由于项目需求是分析6月份的30天的骑行数据,并对比每天每小时的骑行数量,因此只需要从源数据中提取日期,小时和骑行数量。

select day(starttime),hour(starttime),count(*) from tb_trip_06 group by
day(starttime),hour(starttime) order by `_c0`,`_c1`;

_c0, _c1, _c2为临时生成的三个字段,分别表示的是day、hour、 count(日期、小时、数量),需注意的是 _ 是关键字符,如果作为普通字符使用,在外面加上 ` 

2.4,创建新的表并导入上一步所得数据

创建新表:

create table tb_trip_day_hour_count(day int,hour int,counts int)

导入数据: 

insert into tb_trip_day_hour_count selectday(starttime),hour(starttime),
count(*) from tb_trip_06 group byday(starttime),hour(starttime) order by `_c0`,`_c1`;

3,开发web项目

3.1,创建maven的web项目,并导入依赖

创建maven项目后在webapp目录下创建 data (存放china.json和world.json)和 js 文件夹(存放echarts.js、echarts-gl.js和jquery-1.11.0.min.js)

在pom.xml中导入相关依赖,内容如下:

<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>2.3.6</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.3.6</version>
</dependency>
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
</dependencies>

3.2,Util工具包

在util包中新建一个工具类用于与hive数据库连接。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
//获取hive连接
public class HiveDBUtil {
 private static String url="jdbc:hive2://192.168.59.100:10000/nybikedb";		
 private static String user = "root";
 private static String password = "root";
 static {
	 try {
		Class.forName("org.apache.hive.jdbc.HiveDriver");		
	} catch (Exception e) {
		e.printStackTrace();
	}
 }
public static Connection getHiveConn() throws SQLException {
	return DriverManager.getConnection(url,user,password);
}
}

3.3,pojo层

DayCount与hive中tb_trip_day_hour_count表对应,用于对应后端数据的封装

public class DayCount {
	private Integer day;
	private Integer hour;
	private Integer counts;
	
	public DayCount() {
		super();	
	}
	public DayCount(Integer day, Integer hour, Integer counts) {
		super();
		this.day = day;
		this.hour = hour;
		this.counts = counts;
	}
	public Integer getDay() {
		return day;
	}
	public void setDay(Integer day) {
		this.day = day;
	}
	public Integer getHour() {
		return hour;
	}
	public void setHour(Integer hour) {
		this.hour = hour;
	}
	public Integer getCounts() {
		return counts;
	}
	public void setCounts(Integer counts) {
		this.counts = counts;
	}
	@Override
	public String toString() {
		return "DayCount [day=" + day + ", hour=" + hour + ", counts=" + counts + "]";
	}
	

}

HourCountVO类对应前端数据的封装 

import java.util.List;
public class HourCountVO {
	private List<Integer> xData;
	private List<DayItem> yData;
	
	public HourCountVO() {
		super();
	}
	public HourCountVO(List<Integer> xData, List<DayItem> yData) {
		super();
		this.xData = xData;
		this.yData = yData;
	}
	public List<Integer> getxData() {
		return xData;
	}
	public void setxData(List<Integer> xData) {
		this.xData = xData;
	}
	public List<DayItem> getyData() {
		return yData;
	}
	public void setyData(List<DayItem> yData) {
		this.yData = yData;
	}
	@Override
	public String toString() {
		return "HourCount [xData=" + xData + ", yData=" + yData + "]";
	}
	
}

DayItem用于封装每天的数据,其中日期day用于图例。

import java.util.List;
public class DayItem {
	private List<Integer> hourData;
	private String dataName;
	
	public DayItem() {
		super();
	}
	public DayItem(List<Integer> hourData, String dataName) {
		super();
		this.hourData = hourData;
		this.dataName = dataName;
	}
	public List<Integer> getHourData() {
		return hourData;
	}
	public void setHourData(List<Integer> hourData) {
		this.hourData = hourData;
	}
	public String getDataName() {
		return dataName;
	}
	public void setDataName(String dataName) {
		this.dataName = dataName;
	}
	@Override
	public String toString() {
		return "DayItem [hourData=" + hourData + ", dataName=" + dataName + "]";
	}	
}

3.4,dao层

在dao包中新建一个TripDao接口

import java.util.List;
import pojo.DayCount;

public interface TripDao {
	List<DayCount> listCountPreHourOfDay();
 
}

在dao.impl包中新建一个类用于实现接口TripDao

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import dao.TripDao;
import pojo.DayCount;
import utils.HiveDBUtil;
public class TripDaoHiveTmpl implements TripDao{
	public List<DayCount> listCountPreHourOfDay(){
		List<DayCount> list = new ArrayList<DayCount>(720);
		String sql="select * from tb_trip_day_hour_count";		
		try {
			//获取连接
			Connection conn = HiveDBUtil.getHiveConn();
			//获取预编译的sql执行对象
			PreparedStatement ps = conn.prepareStatement(sql);
			//执行sql,获取结果
			ResultSet rs = ps.executeQuery();
			while(rs.next()) {
				int day = rs.getInt("day");
				int hour = rs.getInt("hour");
				int counts = rs.getInt("counts");
				DayCount DC = new DayCount(day,hour,counts);
                list.add(DC);
			}			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;		
	}
}

3.5,service层

在service包中新建一个TripService接口

import pojo.HourCountVO;

public interface TripService {
	HourCountVO findCountPreHourOfDay();

}

在service.impl包中新建一个类用于实现接口TripService

import Service.TripService;
import dao.TripDao;
import dao.impl.TripDaoHiveTmpl;
import pojo.DayCount;
import pojo.DayItem;
import pojo.HourCountVO;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class TripServiceImpl implements TripService{
	private TripDao dao=new TripDaoHiveTmpl();
	public HourCountVO findCountPreHourOfDay() {
		HourCountVO vo=new HourCountVO();
		List<DayCount> list=dao.listCountPreHourOfDay();	
		Set<Integer> xDataSet = new TreeSet<Integer>();
		//声明数组,保存每天的DayItem,数组下标=日期-1
		DayItem[] itemArr = new DayItem[31];
		for (DayCount dc : list) {
			xDataSet.add(dc.getHour());
			DayItem item=itemArr[dc.getDay()-1];
			if(item==null) {
				item = new DayItem();
				item.setDataName("6-"+dc.getDay());
				item.setHourData(new ArrayList<Integer>(24));
				itemArr[dc.getDay()-1]=item;
			}
			item.getHourData().add(dc.getCounts());
		}	
		List<DayItem> yDataList = new ArrayList<DayItem>();
		for (DayItem dayItem : itemArr) {
			if(dayItem !=null) {
				yDataList.add(dayItem);
			}
		}
		List<Integer> xData = new ArrayList<Integer>(xDataSet);
		vo.setxData(xData);
		vo.setyData(yDataList);
		return vo;
	}
}

3.6,control层

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSON;
import Service.TripService;
import Service.impl.TripServiceImpl;
import pojo.HourCountVO;

public class TripServlet extends HttpServlet {
	private static final long ServiceVersionUID = 1L;
	private TripService service = new TripServiceImpl();
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		HourCountVO vo = service.findCountPreHourOfDay();
		String jsonStr = JSON.toJSONString(vo);
		resp.setContentType("application/json;charset=utf-8");
		resp.getWriter().write(jsonStr);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
	doGet(req, resp);
	}

}

3.7,配置web.xml

在web.xml中添加如下内容:

  <servlet>
  	<servlet-name>TripServlet</servlet-name>
  	<servlet-class>control.TripServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>TripServlet</servlet-name>
  	<url-pattern>/trip</url-pattern>
  </servlet-mapping>

3.8,html页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>骑行数据展示</title>
<script type="text/javascript" src="js/echarts.js"></script>
<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
</head>
<body>
	<div id="main" style="width: 1200px;height: 600px"></div>
	<script type="text/javascript">
		var url = "http://localhost:8080/Nybike/trip";
		$.get(url,function(result){
		var xData = result.xData;
		var yData = result.yData;
		var mySeries = [];
		var myLegend = [];
		for ( var index in yData) {
			var item = yData[index];
			var dataName = item.dataName;//6-1
			var hourData = item.hourData;
			myLegend.push(dataName);
			var obj = {
				name:dataName,
				type:'line',
				data:hourData
			};
		mySeries.push(obj);
		}
		//初始化的内置对象
		var myChart = echarts.init(document.getElementById('main'));
		//指定图表的配置项
		var option = {
			title:{text:'骑行数据显示'},
			tooltip:{},
			legend:{
				bottom:1,
				data:myLegend},
			toolbox: {
				  feature: {
					  magicType: { type: ['line', 'bar'] }}},				 
			xAxis:{
				data:xData},
			yAxis:{},
			series:mySeries,
			color:['#FF6699','#FF3366','#CC0066','#CC3366','#CC3399',
				'#CC33CC','#CC00FF','#990066','#CC99FF','#993399',
				'#666FF','#6699FF','#9966CC','#0099FF','#0066FF',
				'#FFCC00','#CC99090','#CC3300','#CC6633','#CC0000',
				'#33CCCC','#00CC99','#99FF99','#009966','#66CCCC',
				'#00CC00','#009999','#339999','#339999','#CCCC00'],				
			};		  	
			myChart.setOption(option);
});
</script>
</body>
</html>

4,页面显示

读取hive表中的数据进行数据可视化文章来源地址https://www.toymoban.com/news/detail-425057.html

到了这里,关于读取hive表中的数据进行数据可视化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Hadoop+hive+flask+echarts大数据可视化之系统数据收集

           谈到大数据的项目,一般以数据可视化为主体,收集大数据中的有用信息,存储到分布式存储系统hadoop中,由hive导入hadoop中存储的数据,使用HQL语句对数据进行分析,hive底层会将HQL语句转化成mapreduce程序,flask作为python语言的后台技术,可以连接hive将HQL语句的分析结

    2023年04月13日
    浏览(43)
  • 基于Hadoop和Hive的聊天数据(FineBI)可视化分析

    目录 1. 准备工作 2. 新建数据库连接 3. 在Hive数据库中创建存放数据的表 4. ETL数据清洗 5. 指标 ​6. 进入Fine BI数据中心 参考内容https://www.bilibili.com/read/cv15490959/ 数据文件、jar包、插件 https://pan.baidu.com/s/1Mpquo0EgkyZtLHrCPIK2Qg?pwd=7w0k 在FineBI6.0webappswebrootWEB-INFlib下放置jar包 启动

    2024年04月17日
    浏览(71)
  • 【数据可视化】通过使用网络爬虫对数据爬取并进行可视化分析

      本次项目所爬取的网页为柳州职业技术学院电子信息工程学院的超星学习通课程中心。在该网页中可以查看到电子信息工程学院历年的超星课程创建情况,还可以进入到课程界面查看相应的教学资源。   在该网页中,详细记录了课程序号、课程名称、课程链接、所属院

    2024年02月04日
    浏览(42)
  • 【数据挖掘与人工智能可视化分析】可视化分析:如何通过可视化技术进行数据挖掘和发现

    作者:禅与计算机程序设计艺术 数据挖掘(Data Mining)和人工智能(Artificial Intelligence,AI)已经成为当今社会热点话题。这两者之间的结合也带来了很多挑战。作为数据科学家、机器学习工程师、深度学习研究员等,掌握了数据的获取、清洗、处理、建模、应用这些技术的前提下,

    2024年02月07日
    浏览(60)
  • 使用Kibana进行数据可视化

    使用 Kibana 进行数据可视化 使用 ELK 堆栈(Elasticsearch、Logstash 和 Kibana)和 Elastic Stack 的一部分 Kibana 可视化和分析数据。 课程英文名:Data Visualization with Kibana 此视频教程共21.0小时,中英双语字幕,画质清晰无水印,源码附件全 下载地址 百度网盘地址:https://pan.baidu.com/s/1

    2023年04月13日
    浏览(30)
  • 利用Python进行数据可视化Plotly与Dash的应用【第157篇—数据可视化】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 数据可视化是数据分析中至关重要的一环,它能够帮助我们更直观地理解数据并发现隐藏的模式和趋势。在Python中,有许多强大的工具可以用

    2024年04月14日
    浏览(48)
  • 如何使用Python进行数据可视化

    数据可视化是一种将数据呈现为图形或图表的技术,它有助于理解和发现数据中的模式和趋势。Python是一种流行的编程语言,有很多库可以帮助我们进行数据可视化。在本文中,我们将介绍使用Python进行数据可视化的基本步骤。 第一步:导入必要的库 在开始之前,我们需要

    2024年02月08日
    浏览(34)
  • 使用Puppeteer进行游戏数据可视化

    导语 Puppeteer是一个基于Node.js的库,可以用来控制Chrome或Chromium浏览器,实现网页操作、截图、测试、爬虫等功能。本文将介绍如何使用Puppeteer进行游戏数据的爬取和可视化,以《英雄联盟》为例。 概述 《英雄联盟》是一款由Riot Games开发和运营的多人在线竞技游戏,拥有数亿

    2024年02月09日
    浏览(41)
  • 大数据毕业设计Flink+Hadoop+Hive地铁客流量可视化 地铁客流量预测 交通大数据 地铁客流量大数据 交通可视化 机器学习 深度学习 人工智能 知识图谱 数据可视化 计算机毕业设计

    河北传媒学院 本科 毕业 论文开题报告 专业 小四号宋体 班级 小四号宋体 姓名 小四号宋体 学号 小四号宋体 指导教师 小四号宋体 题目 基于hadoop+spark的深圳市地铁运营的分析与可视化 (1.内容包括:课题的来源及意义,国内外发展状况,本课题的研究目标、内容、方法、手

    2024年03月19日
    浏览(42)
  • 【数据分析与可视化】利用Python对学生成绩进行可视化分析实战(附源码)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 下面对学生成句和表现等数据可视化分析 1:导入模块 2:获取数据 并打印前四行  属性列表对应含义如下 Gender  性别 Nationality  国籍 PlaceofBirth 出生地 Stageid 学校级别 Gradeid 年级 Sectionid  班级 Topic 科目 semester 学期 ra

    2024年02月03日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包