zoukankan      html  css  js  c++  java
  • hivepython 实现一行转多行

    案例1:

    ==效果等同于一行转多行

    数据表名称:zhangb.gid_tags
    数据格式,每行是2个字段,(gid,tags) ,可能有脏数据,分隔符为“ ”,
     
    ANDROID-9de77225cadb4319adfc1b1fe51c54f0        h65010000,014200,018100,011300,0200
    ANDROID-9de77dfdbbab42679eed11f4e48c0ffc         022000,026400,022400,016400,018100
     
    要统计tags中每个tag出现的次数:使用hive python方法:
     
    第一步:写python处理脚本:脚本名字:hivepython.py
     
    import sys
    for line in sys.stdin:
         appArray=line.strip( ).split(" ") 
         if len(appArray)==2:
             gid=appArray[0]
             tags=appArray[1].split(",")
             for tag in tags:
                  print  tag
    脚本输出是1个字段 tag
     
    第二步,将python脚本加进hive 中:
    add file /home/zhangb/hivepython.py
     
    第三步:运行hive语句:
     
    select b.* from (
    select a.counter_attr as tag,count(1) as tag_count from (
    select TRANSFORM(gid,usertags) USING 'python hivepython.py' as counter_attr from zhangb.gid_tags) a
    group by a.counter_attr) b
    sort by b.tag;
     
     
     
    案例2:
    案例1是python处理后输出了1个字段,下面是输出多个字段的形式:
    【参考:http://www.cnblogs.com/Joe-T/p/4643452.html】
      

    Hive中有一表,列分隔符为冒号(:),有一列utime是Timestamp格式,需要转成Weekday存到新表。

    利用Python写一个Pipeline的Transform,weekday.py的代码也很简单:
    import sys
    import datetime
    for line in sys.stdin:
       line=line.strip()
       uid,mid,rating,utime=line.split(':')
       weekday=datetime.datetime.fromtimestamp(float(utime)).isoweekday()
       print ' '.join([uid,mid,rating,str(weekday)])
     
    HQL的查询也很简单:
    select 
    transform(uid,mid,rating,utime) 
    using 'python weekday.py' as (uid,mid,rating,weekday) 
    from rating
      
     
  • 相关阅读:
    asp.net 内部重定向
    配置元素customErrors
    路由配置4-伪静态
    路由配置3
    路由配置2(转)
    ASP.NET实现图片防盗链(转)
    global中拦截404错误的实现方法
    使用一个HttpModule拦截Http请求,来检测页面刷新(F5或正常的请求)
    HttpApplication事件执行顺序(转)
    Android Studio NDK 新手教程(5)--Java对象的传递与改动
  • 原文地址:https://www.cnblogs.com/zhangbojiangfeng/p/6078001.html
Copyright © 2011-2022 走看看