• Hive UDF作业


    说到这次作业,看似简单的几个步骤,对于我这样的菜鸟来说可真是一波三折啊。下面来说说这次的步骤和我遇到的问题。

    首先准备工作,搭建好hive环境,保证hadoop集群是启动的。这个就不多说了。

    第一步:将数据导入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 '/home/hadoop/stock.csv' INTO TABLE stock;

    结果这里就报错了,错误提示是在hdfs上没有相匹配的目录文件,大概就是这个意思。

    我当时就是想不明白是怎么回事,后来找了班上的一些同学的帮助。我们特训班7班的“西安—假装”同学那里我知道了错误的原因在哪里了。

    原因:'/home/hadoop/stock.csv 的目录文件是在本地的linux上的,而hdfs是在

    我自己开始就把概念搞混了,错误的以为hdfs是linux里的某个目录。正确操作应该是

    hive> LOAD DATA LOCAL INPATH '/home/hadoop/stock.csv' INTO TABLE stock;

    加上LOCAL表示本地的意思。

    创建分区表 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;

    这几步也ok没什么大问题,就是将stock表中的数据导入stock_partition表,这个过程需要一些时间,耐心等待。

    接下来遇到的问题就麻烦了,我也是请教了别人才知道原因出在哪里。

    Hive 自定义Max统计最大值,和Hive 自定义Min统计最小值。这两个函数的时候我居然还犯了这样的低级错误自己开始还不知道。

     

    我就直接打包到linux下去使用,毫无疑问肯定报错。其实就是缺少了hive的架包没因进去。

    经过到网上下载hive架包,把架包添加到工程,错误消失了,再次打包,结果还是报错了

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

     

    没问题。

    接下来创建Hive自定义的临时方法maxprice和minprice

     

     

    问题来了。

    这有说什么原因呢???真的要问下自己了,基础太不扎实了,简直漏洞百出,实在没有头绪的时候,我又和我们班的同学还老师请教了下,开始我是核对jdk版本是否一致,核对结果是一样的,排除了jdk的问题,经过老师和同学的指导,分析:

    1. 我敲的代码有问题,经过检查,代码没问题,该引入的包都引入了。
    2. Hive环境没搭建好,这个原因也排除。
    3. 那就只有最后一个原因了,打包的过程出了问题。

    确实是,打包的时候应把这两个文件一起打包,我开始是只打包了代码。

    OK这样打包后顺利通过,没问题了

     

     

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

    真是活见鬼了,没有哪步是顺利过的。又出错了

    好吧,分析错误吧,其实这个是图文教程里出错了,正确的应该是

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

    经过实现,结果出来了

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

    OK结果也出来了,到这里本次作业完成!

  • 相关阅读:
    绝对值公式
    高中数学必修1 之 函数
    破解 k4n3程序(调♂教 绅(hen)士(tai) 程序猿)
    摘抄一些看雪坛友的经典语录
    代码子控件居中于父控件
    Floyd模板
    Dijkstra模板
    并查集模板
    字典树模板
    STL之queue
  • 原文地址:https://www.cnblogs.com/braveym/p/7699962.html
Copyright © 2020-2023  润新知