用Hive分析"余额宝"躺着赚大钱背后的逻辑

举报
Smy1121 发表于 2019/07/11 21:55:56 2019/07/11
【摘要】 好几年前,支付宝推出的“余额宝”赚尽无数人的眼球,同时也吸引的大量的小额资金进入。“余额宝”把用户的散钱利息提高到了年化收益率4.0%左右,比起银行活期存储存款0.3%左右高出太多了,也正在撼动着银行躺着赚钱的地位。

一、背景

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


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


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


二、需求分析

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


三、项目数据集

下载数据集


数据格式如下:

tradedate:交易日期

tradetime:交易时间

stockid:股票id

buyprice:买入价格

buysize:买入数量

sellprice:卖出价格

sellsize:卖出数量


image.png


四、项目思路分析

基于项目的需求,我们可以使用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 DOUBLE,sellsize INT) 

>row format delimited fields terminated by ','  STORED AS TEXTFILE;


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

hive> LOAD DATA INPATH '/advance/hive/total.csv' INTO TABLE stock;


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

hive>  create table if not exists stock_partition (tradetime STRING,stockid STRING,buyprice DOUBLE,buysize INT,sellprice DOUBLE,sellsize INT)

>partitioned by (tradedate STRING) row format delimited fields terminated by ',';


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

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;


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


Hive 自定义Max统计最大值:

/**

* @function 自定义UDF统计最大值

* @author John

*

*/

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统计最小值:

/**

 * @function 自定义UDF统计最小值

 * @author John

 *

 */

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函数:

hive> add jar /home/hadoop/hive/maxUDF.jar;

Added [/home/hadoop/hive/maxUDF.jar] to class path

Added resources: [/home/hadoop/hive/maxUDF.jar]


hive> add jar /home/hadoop/hive/minUDF.jar;

Added [/home/hadoop/hive/minUDF.jar] to class path

Added resources: [/home/hadoop/hive/minUDF.jar]



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

hive>  create temporary function maxprice  as 'com.dajiangtai.hadoop.hive.Max'; 

OK

Time taken: 0.094 seconds

hive>  create temporary function minprice  as 'com.dajiangtai.hadoop.hive.Min';

OK

Time taken: 0.012 seconds



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

hive> select stockid,tradedate, max(maxprice(buyprice,sellprice)),min(minprice(buyprice,sellprice))  from stock_partition where stockid='204001' group by tradedate;

204001  20130722        4.05    0.0

204001  20130723        4.48    2.2

204001  20130724        4.65    2.205

204001  20130725        11.9    8.7

204001  20130726        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); 

204001  20130725        0951    9.94375

204001  20130725        0952    9.959999999999999

204001  20130725        0953    10.046666666666667

204001  20130725        0954    10.111041666666667

204001  20130725        0955    10.132500000000002

204001  20130725        0956    10.181458333333333

204001  20130725        0957    10.180625

204001  20130725        0958    10.20340909090909

204001  20130725        0959    10.287291666666667

204001  20130725        1000    10.331041666666668

204001  20130725        1001    10.342500000000001

204001  20130725        1002    10.344375

204001  20130725        1003    10.385

204001  20130725        1004    10.532083333333333

204001  20130725        1005    10.621041666666667

204001  20130725        1006    10.697291666666667

204001  20130725        1007    10.702916666666667

204001  20130725        1008    10.78


可以参照步骤统计204001这只股票,每天每分钟的均价。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。