案例1:

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

数据表名称:zhangb.gid_tags
数据格式,每行是2个字段,(gid,tags) ,可能有脏数据,分隔符为“\t”,
 
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("\t") 
     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 '\t'.join([uid,mid,rating,str(weekday)])
 
HQL的查询也很简单:
select 
transform(uid,mid,rating,utime) 
using 'python weekday.py' as (uid,mid,rating,weekday) 
from rating

  

 

hivepython 实现一行转多行的更多相关文章

  1. winform代码:关联窗体数据更新,删除dataGridview中选中的一行或多行

    一.关联窗体数据更新 关联窗体数据修改时,如果一个为总体数据显示窗体A,另一个为详细修改窗体B,从A进入B,在B中对数据进行修改,然后返回A,这时A窗体的数据需要更新. 我采用最简单的方法,首先保证每 ...

  2. HNU13028Attacking rooks (二分匹配,一行变多行,一列变多列)

    Attacking rooks Time Limit: 20000ms, Special Time Limit:50000ms, Memory Limit:65536KB Total submit u ...

  3. hive 实现一个字段多行转一行 和 一行转多行

    1.多行转一行 多行转一行可以通过concat_ws(',',collect_set(col_name)) as col_new的方式实现,可以参考:https://www.cnblogs.com/s ...

  4. hive一行变多行及多行变一行

    hive一行变多行及多行变一行 场景 name alias zhaoqiansun abc def ghi 处理数据时需要将上表处理成为下面的形式: name alias zhaoqiansun ab ...

  5. 一行转多行 及多行转一行的 hive语句

      注意 :|,: 是特殊符号,要用 "\\|", "\\;"来表示.   一行转多行 usertags 里面有很多项,每项之间以逗号分隔   create t ...

  6. 在用easyui中做CRUD功能时,当删除一行或多行数据后再点击修改会提示你选中了多行,如何解决这个bug了?

    在用easyui中做CRUD功能时,当删除一行或多行数据后再点击修改会提示你选中了多行,如何解决这个bug了? 在删除成功后,加上这句话就可以了:$("#dg").datagrid ...

  7. (原)未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值与DATEADD

    SQLServer2014,查询分析器中 这样的脚本是没有问题的:AND TPO.CREATEON <= DATEADD(DAY, 1, '2017/3/3 0:00:00') 但.NET  D ...

  8. Java使用FileReader(file)、readLine()读取文件,以行为单位,一次读一行,一直读到null时结束,每读一行都显示行号。

    //Java使用FileReader(file).readLine()读取文件,以行为单位,一次读一行,一直读到null时结束,每读一行都显示行号. public static void readFi ...

  9. WPF DataGrid 获取选中 一行 或者 多行

    WPF中DataGrid使用时,需要将其SelectedItem转换成DataRowView进行操作 然而SelectedItem 与SelectedItems DataGrid的SelectionU ...

随机推荐

  1. 【python】专用下划线标识符说明

    __xxx__:系统定义名字 __xxx:类中私有变量名 说明:__xxx看做“私有的”,在模块或者类外是不可以使用.

  2. AngularJS---核心特性

    步入正题.学习Angular,首先得了解.熟知.掌握它的四大核心特性. 一.MVC模式 Model(模型):是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据. View( ...

  3. 实际用户ID和有效用户ID (二)

    看UNIX相关的书时经常能遇到这几个概念,但一直没有好好去理清这几个概念,以致对这几个概念一直一知半解.今天好好区分了一下这几个概念并总结如下.说白了这几个UID引出都是为了系统的权限管理. 下面分别 ...

  4. npm使用入门(package.json)

    npm使用入门 crazygit 关注 2017.03.10 18:31 字数 1773 阅读 1617评论 0喜欢 10 NPM是什么 npm npm makes it easy for JavaS ...

  5. JMS概念

    来自为知笔记(Wiz)

  6. 一些css杂项笔记

    div[class*="col-"]{ background-color: gold; border: 1px solid #ccc; } //给class开头等于col-的div ...

  7. Rest架构以及什么是Restful

    关于Rest的内容,在网上开了好多文章~ 下面我就把一些关于Rest经典的链接发出来,大家可以参考一下~ 1.什么是Rest和Restful? 怎样用通俗的语言解释什么叫 REST,以及什么是 RES ...

  8. 用 tornado 做网站 (7)

    转自:http://wiki.jikexueyuan.com/project/start-learning-python/309.html 用 tornado 做网站 (7) 到上一节结束,其实读者已 ...

  9. 小朋友学Python(2)

    本节学习python的第一个程序:输出“Hello World!”.咱们用两种方法实现 方法(一) 进入python环境,直接使用print方法   hello world.png 方法(二) 先编程 ...

  10. 编写函数digit(num, k),函数功能是:求整数num从右边开始的第k位数字的值,如果num位数不足k位则返回0。

    function digit(num,k){         var knum = 0;         for(var i=1; i<=k; i++){                 knu ...