一、项目背景

前两年,支付宝推出的“余额宝”赚尽无数人的眼球,同时也吸引的大量的小额资金进入。“余额宝”把用户的散钱利息提高到了年化收益率4.0%左右,比起银行活期存储存款0.3%左右高出太多了,也正在撼动着银行躺着赚钱的地位。

在金融市场,如果想获得年化收益率4%-5%左右也并非难事,通过“逆回购”一样可以。一旦遇到货币紧张时(银行缺钱),更可达到50%一天隔夜回够利率。我们就可以美美地在家里数钱了!!

所谓逆回购:通俗来讲,就是你(A)把钱借给别人(B),到期时,B按照约定利息,还给你(A)本资+利息。逆回购本身是无风险的。(操作银行储蓄存款类似)。现在火热吵起来的,阿里金融的“余额宝”利息与逆回购持平。我们可以猜测“余额 宝”的资金也在操作“逆回购”,不仅保持良好的流通性,同时也提供稳定的利息。

二、项目需求分析

通过历史数据分析,找出走势规律,发现当日高点,进行逆回购,赚取最高利息。

三、项目数据集

猛戳此链接下载数据集

数据格式如下:

  tradedate: 交易日期

  tradetime: 交易时间

  stockid: 股票id

  buyprice: 买入价格

  buysize: 买入数量

  sellprice: 卖出价格

  sellsize: 卖出数量

四、项目思路分析

基于项目的需求,我们可以使用Hive工具完成数据的分析。

1、首先将数据集total.csv导入Hive中,用日期做为分区表的分区ID。

2、选取自己的股票编号stockid,分别统计该股票产品每日的最高价和最低价。

3、以分钟做为最小单位,统计出所选股票每天每分钟均价。

五、步骤详解

第一步:将数据导入Hive中

在hive中,创建 stock 表结构。

hive> create table if not exists stock(tradedate string, tradetime string, stockid string, buyprice double, buysize int, sellprice string, sellsize int) row format delimited fields terminated by ',' stored as textfile;
OK
Time taken: 0.207 seconds
hive> desc stock;
OK
tradedate string
tradetime string
stockid string
buyprice double
buysize int
sellprice string
sellsize int
Time taken: 0.147 seconds, Fetched: row(s)

将HDFS中的股票历史数据导入hive中。

[hadoop@master bin]$ cd /home/hadoop/test/
[hadoop@master test]$ sudo rz
hive> load data local inpath ‘/home/handoop/test/stock.csv’ into table stock;

创建分区表 stock_partition,用日期做为分区表的分区ID。

hive> create table if not exists stock_partition(tradetime string, stockid string, buyprice double, buysize int, sellprice string, sellsize int) partitioned by (tradedate string) row format delimited fields terminated by ',';
OK
Time taken: 0.112 seconds
hive> desc stock_partition;
OK
tradetime string
stockid string
buyprice double
buysize int
sellprice string
sellsize int
tradedate string # Partition Information
# col_name data_type comment tradedate string

如果设置动态分区首先执行。

hive>set hive.exec.dynamic.partition.mode=nonstrict;

创建动态分区,将stock表中的数据导入stock_partition表。

hive> insert overwrite table stock_partition partition(tradedate) select tradetime, stockid, buyprice, buysize, sellprice, sellsize, tradedate from stock distribute by tradedate;
Query ID = hadoop_20180524122020_f7a1b61a-84ed--a37e-64ef9c3abc5f
Total jobs =
Launching Job out of
Number of reduce tasks not specified. Estimated from input data size:
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>
Starting Job = job_1527103938304_0002, Tracking URL = http://master:8088/proxy/application_1527103938304_0002/
Kill Command = /opt/modules/hadoop-2.6./bin/hadoop job -kill job_1527103938304_0002
Hadoop job information for Stage-: number of mappers: ; number of reducers:
-- ::, Stage- map = %, reduce = %
-- ::, Stage- map = %, reduce = %, Cumulative CPU 2.19 sec
-- ::, Stage- map = %, reduce = %, Cumulative CPU 5.87 sec
MapReduce Total cumulative CPU time: seconds msec
Ended Job = job_1527103938304_0002
Loading data to table default.stock_partition partition (tradedate=null)
Time taken for load dynamic partitions :
Loading partition {tradedate=}
Loading partition {tradedate=}
Loading partition {tradedate=}
Loading partition {tradedate=}
Loading partition {tradedate=}
Time taken for adding to write entity :
Partition default.stock_partition{tradedate=} stats: [numFiles=, numRows=, totalSize=, rawDataSize=]
Partition default.stock_partition{tradedate=} stats: [numFiles=, numRows=, totalSize=, rawDataSize=]
Partition default.stock_partition{tradedate=} stats: [numFiles=, numRows=, totalSize=, rawDataSize=]
Partition default.stock_partition{tradedate=} stats: [numFiles=, numRows=, totalSize=, rawDataSize=]
Partition default.stock_partition{tradedate=} stats: [numFiles=, numRows=, totalSize=, rawDataSize=]
MapReduce Jobs Launched:
Stage-Stage-: Map: Reduce: Cumulative CPU: 5.87 sec HDFS Read: HDFS Write: SUCCESS
Total MapReduce CPU Time Spent: seconds msec
OK
Time taken: 39.826 seconds

第二步:hive自定义UDF,统计204001该只股票每日的最高价和最低价

Hive 自定义Max统计最大值。

package zimo.hadoop.hive;

import org.apache.hadoop.hive.ql.exec.UDF;

/**
* @function 自定义UDF统计最大值
* @author Zimo
*
*/
public class Max extends UDF{ public Double evaluate(Double a, Double b) {
if(a == null)
a=0.0;
if(b == null)
b=0.0;
if(a >= b){
return a;
} else {
return b;
}
}
}

Hive 自定义Min统计最小值。

package zimo.hadoop.hive;

import org.apache.hadoop.hive.ql.exec.UDF;

/**
* @function 自定义UDF统计最小值
* @author Zimo
*
*/
public class Min extends UDF{ public Double evaluate(Double a, Double b) { if(a == null)
a = 0.0;
if(b == null)
b = 0.0;
if(a >= b){
return b;
} else {
return a;
}
}
}

将自定义的Max和Min分别打包成maxUDF.jar和minUDF.jar, 然后上传至/home/hadoop/hive目录下,添加Hive自定义的UDF函数

[hadoop@master ~]$ cd $HIVE_HOME
[hadoop@master hive1.0.0]$ sudo mkdir jar/
[hadoop@master hive1.0.0]$ ll
total
drwxr-xr-x hadoop hadoop May : bin
drwxr-xr-x hadoop hadoop May : conf
drwxr-xr-x hadoop hadoop May : examples
drwxr-xr-x hadoop hadoop May : hcatalog
drwxrwxr-x hadoop hadoop May : iotmp
drwxr-xr-x root root May : jar
drwxr-xr-x hadoop hadoop May : lib
-rw-r--r-- hadoop hadoop Jan LICENSE
drwxr-xr-x hadoop hadoop May : logs
-rw-r--r-- hadoop hadoop Jan NOTICE
-rw-r--r-- hadoop hadoop Jan README.txt
-rw-r--r-- hadoop hadoop Jan RELEASE_NOTES.txt
drwxr-xr-x hadoop hadoop May : scripts
[hadoop@master hive1.0.0]$ cd jar/
[hadoop@master jar]$ sudo rz
[hadoop@master jar]$ ll
total
-rw-r--r-- root root May maxUDF.jar
-rw-r--r-- root root May minUDF.jar
hive> add jar /opt/modules/hive1.0.0/jar/maxUDF.jar;
Added [/opt/modules/hive1.0.0/jar/maxUDF.jar] to class path
Added resources: [/opt/modules/hive1.0.0/jar/maxUDF.jar]
hive> add jar /opt/modules/hive1.0.0/jar/minUDF.jar;
Added [/opt/modules/hive1.0.0/jar/minUDF.jar] to class path
Added resources: [/opt/modules/hive1.0.0/jar/minUDF.jar]

创建Hive自定义的临时方法maxprice和minprice。

hive> create temporary function maxprice as 'zimo.hadoop.hive.Max';
OK
Time taken: 0.009 seconds
hive> create temporary function minprice as 'zimo.hadoop.hive.Min';
OK
Time taken: 0.004 seconds

统计204001股票,每日的最高价格和最低价格。

hive> select stockid, tradedate, max(maxprice(buyprice,sellprice)), min(minprice(buyprice,sellprice)) from stock_partition where stockid='204001' group by tradedate;
4.05 0.0
4.48 2.2
4.65 2.205
11.9 8.7
12.3 5.2

第三步:统计每分钟均价

统计204001这只股票,每天每分钟的均价

hive> select stockid, tradedate, substring(tradetime,0,4), sum(buyprice+sellprice)/(count(*)*2) from stock_partition where stockid='204001' group by stockid, tradedate, substring(tradetime,0,4);
9.94375
9.959999999999999
10.046666666666667
10.111041666666667
10.132500000000002
10.181458333333333
10.180625
10.20340909090909
10.287291666666667
10.331041666666668
10.342500000000001
10.344375
10.385
10.532083333333333
10.621041666666667
10.697291666666667
10.702916666666667
10.78

以上就是博主为大家介绍的这一板块的主要内容,这都是博主自己的学习过程,希望能给大家带来一定的指导作用,有用的还望大家点个支持,如果对你没用也望包涵,有错误烦请指出。如有期待可关注博主以第一时间获取更新哦,谢谢! 

版权声明:本文为博主原创文章,未经博主允许不得转载。

												

Hive项目实战:用Hive分析“余额宝”躺着赚大钱背后的逻辑的更多相关文章

  1. 3.15-3.21 hive项目实战

    一.创建表并导入日志数据,引出问题 ##建表 hive (default)> create table IF NOT EXISTS default.bf_log_src( > remote ...

  2. 【慕课网实战】Spark Streaming实时流处理项目实战笔记十五之铭文升级版

    铭文一级:[木有笔记] 铭文二级: 第12章 Spark Streaming项目实战 行为日志分析: 1.访问量的统计 2.网站黏性 3.推荐 Python实时产生数据 访问URL->IP信息- ...

  3. Spark大型项目实战:电商用户行为分析大数据平台

    本项目主要讲解了一套应用于互联网电商企业中,使用Java.Spark等技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为.页面跳转行为.购物行为.广告点击行为等)进行复杂的分析.用统计分 ...

  4. Hadoop项目实战-用户行为分析之应用概述(二)

    1.概述 本课程的视频教程地址:<项目整体概述> 本节给大家分享的主题如下图所示: 下面我开始为大家分享第二节的内容——<项目整体概述>,下面开始今天的分享内容. 2.内容 从 ...

  5. Hive -- 基于Hadoop的数据仓库分析工具

    Hive是一个基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库 ...

  6. Spark入门实战系列--5.Hive(上)--Hive介绍及部署

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...

  7. webpack 教程 那些事儿04-webpack项目实战分析

    这节主要讲解真正项目用用到的 webpack配置问题,项目实战篇 就像我们不会完全做一个项目,不用别人的轮子一样.这个配置我们借用 vue-cli 搭建的配置来研究,因为它已经足够优秀. 有了前面的基 ...

  8. 《OD大数据实战》Hive入门实例

    官方参考文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual 一.命令行和客户端 1. 命令窗口 1)进入命令窗口 hi ...

  9. 《OD大数据实战》Hive环境搭建

    一.搭建hadoop环境 <OD大数据实战>hadoop伪分布式环境搭建 二.Hive环境搭建 1. 准备安装文件 下载地址: http://archive.cloudera.com/cd ...

随机推荐

  1. Ubuntu下安装软件

    在ubuntu当中,安装应用程序有三种方法,分别是:apt-get,dpkg安装deb和make install安装源码包三种. apt-get方法 使用apt-get install来安装应用程序算 ...

  2. idea-spark-sbt 打包jar

    1.打开idea下的terminal窗口 2.只打包部分项目 sbt insight-import/clean  insight-import/assembly 这表示只打包主目录下的insight- ...

  3. Linux TCP通信例子

    TCP通信的C/S模型 ///server.c #include <sys/types.h> #include <sys/socket.h> #include <stdi ...

  4. commons-configuration读取配置文件

    关键工具类: import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.con ...

  5. 用C语言实现一个公用库函数void * memmove(void *dest,const void *src,size_t n)

    用C语言实现一个公用库函数void * memmove(void *dest,const void *src,size_t n). 该函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址 ...

  6. MQTT协议实现Eclipse Paho学习总结二

    一.概述 前一篇博客(MQTT协议实现Eclipse Paho学习总结一) 写了一些MQTT协议相关的一些概述和其实现Eclipse Paho的报文类别,同时对心跳包进行了分析.这篇文章,在不涉及MQ ...

  7. Dropout和学习率衰减

         Dropout 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象.在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上 ...

  8. OpenStack虚机状态变化图解

    对官网上内容的一个翻译,方便自己以后查找资料用 The following diagrams and tables show the required virtual machine (VM) sta ...

  9. C++的STL总结(2)

    紧接着上篇博客,把没总结全的继续补充. (13)set容器 set是用红黑树的平衡二叉索引树的数据结构来实现的,插入时,它会自动调节二叉树排列,把元素放到适合的位置,确保每个子树根节点的键值大于左子树 ...

  10. 【转】C#里partial关键字的作用

    源地址:http://www.cnblogs.com/OpenCoder/archive/2009/10/27/1590328.html