`
安铁辉
  • 浏览: 241656 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hive+python 入门

 
阅读更多
自己写的一个简单例子,用来做话题描述去重,表中的desc字段 “a-b-a-b-b-c”需要去重
python代码如下:
#!/usr/bin/python
import sys
reload(sys)
sys.setdefaultencoding('utf8')
def quchong(desc):
    a=desc.split('-')
    return '-'.join(set(a))
while True:
        line = sys.stdin.readline()
        if line == "":
                break
        line = line.rstrip('\n')
        # your process code here
        parts = line.split('\t')
        parts[2]=quchong(parts[2])
        print "\t".join(parts)

下面是转载过来的,比较详细
二、hive map中字段自增的写法(转)
分类: hadoop 2010-09-03 16:01 99人阅读 评论(0) 收藏 举报

1、建立表结构

hive> CREATE TABLE t3 (foo STRING, bar MAP<STRING,INT>)
    > ROW FORMAT DELIMITED
    > FIELDS TERMINATED BY '/t'
    > COLLECTION ITEMS TERMINATED BY ','
    > MAP KEYS TERMINATED BY ':'
    > STORED AS TEXTFILE;
OK

 

2、建成的效果

hive> describe t3;
OK
foo     string
bar     map<string,int>

 

3、生成test.txt

jeffgeng        click:13,uid:15

 

4、把test.txt load进来

hive> LOAD DATA LOCAL INPATH 'test.txt' OVERWRITE INTO TABLE t3;
Copying data from file:/root/src/hadoop/hadoop-0.20.2/contrib/hive-0.5.0-bin/bin/test.txt
Loading data to table t3
OK

 

load完效果如下

hive> select * from t3;
OK
jeffgeng        {"click":13,"uid":15}

 

5、可以这样查map的值

hive> select bar['click'] from t3;

...一系列的mapreduce...

OK
13

 

6、编写add_mapper

#!/usr/bin/python
import sys
import datetime

for line in sys.stdin:
    line = line.strip()
    foo, bar = line.split('/t')
    d = eval(bar)
    d['click'] += 1
    print '/t'.join([foo, str(d)])

 

7、在hive中执行

hive> CREATE TABLE t4 (foo STRING, bar MAP<STRING,INT>)
    > ROW FORMAT DELIMITED
    > FIELDS TERMINATED BY '/t'
    > COLLECTION ITEMS TERMINATED BY ','
    > MAP KEYS TERMINATED BY ':'
    > STORED AS TEXTFILE;

 

hive> add FILE add_mapper.py

 

INSERT OVERWRITE TABLE t4
    > SELECT
    >   TRANSFORM (foo, bar)
    >   USING 'python add_mapper.py'
    >   AS (foo, bar)
    > FROM t3;
FAILED: Error in semantic analysis: line 1:23 Cannot insert into target table because column number/types are different t4: Cannot convert column 1 from string to map<string,int>.

 

8、为什么会报出以上错误?貌似add_mapper.py的输出是string格式的,hive无法此这种格式的map认出。后查明,AS后边可以为字段强制指定类型

INSERT OVERWRITE TABLE t4
SELECT
  TRANSFORM (foo, bar)
  USING 'python add_mapper.py'
  AS (foo string, bar map<string,int>)
FROM t3;

 

9、同时python脚本要去除字典转换后遗留下来的空格,引号,左右花排号等

#!/usr/bin/python
import sys
import datetime

for line in sys.stdin:
    line = line.strip('/t')
    foo, bar = line.split('/t')
    d = eval(bar)
    d['click'] += 1
    d['uid'] += 1
    strmap = ''
    for x in str(d):
        if x in (' ', "'"):
            continue
        strmap += x
    print '/t'.join([foo, strmap])

 

10、执行后的结果

hive> select * from t4;
OK
jeffgeng        {"click":14,"uid":null}
Time taken: 0.146 seconds

uid没有自增,原因待查
分享到:
评论
4 楼 cldtc 2014-08-13  
请问这种情况下python脚本里面怎么打counter呢?通常的打法会直接进stderr不会被解析诶
3 楼 chinesejie 2014-07-24  
print '\t'.join([foo, strmap])+ " " //此处多个空格

然后uid就出来了
2 楼 dacoolbaby 2013-03-04  
dacoolbaby 写道
请问我执行Python的时候就报错
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: [Error 20003]: An error occurred when trying to close the Operator running your custom script.

我脚本是没有问题的,测试过的。
为什么还会这样呢??

请问,您是在分布式环境下跑的吗?
1 楼 dacoolbaby 2013-02-27  
请问我执行Python的时候就报错
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: [Error 20003]: An error occurred when trying to close the Operator running your custom script.

我脚本是没有问题的,测试过的。
为什么还会这样呢??

相关推荐

    hive+python数据分析入门

    这就相当于hive+python了hive+python能解决大多的需求,除非你的数据是非结构化数据,此时你就回到了远古时代不得不写mapreduce了.而为什么不使用hive+java,hive+c,hive+...因为:python真是太好用了,脚本语言,无需编译...

    大数据入门HIVE和MySQL安装包

    配套专栏:https://blog.csdn.net/yellow_python/category_10582173.html

    python-learning.zip

    整理了python从基础入门到高级进阶的所有资料: 01.初识Python.md 02.语言元素.md 03.分支结构.md 04.循环结构.md 05.构造程序逻辑.md 06.函数和模块的使用.md 07.字符串和常用数据结构.md 08.面向对象编程基础.md ...

    价值上万的视频教程互联网程序开发+大数据+Hadoop、hive、Spark

    HBase、 Java9 、Java10 、MySQL优化 、JVM原理 、JUC多线程、 CDH版Hadoop Impala、 Flume 、Sqoop、 Azkaban、 Oozie、 HUE、 Kettle、 Kylin 、Spark 、Mllib机器学习、 Flink、 Python、 SpringBoot、 Hadoop3.x...

    Scriptis:Scriptis用于交互式数据分析,包括脚本开发(SQL,Pyspark,HiveQL),任务提交(Spark,Hive),UDF,功能,资源管理和智能诊断

    计算引擎:Scriptis基于Linkis,可与Spark,Hive,Python等多个计算引擎连接。 运行时功能:完整的作业生命周期显示和智能诊断。 结果集:多个结果集支持,自定义结果集别名和一键式可视化。 数据库服务:用于...

    大数据基础知识入门.pdf

    大数据基础知识入门 社会保障事业部 张火磊 主要内容 大数据价值 03 大数据概念、特性、由来 01 大数据应用举例 04 02 Hadoop技术介绍 大数据概念、特性、由来 什么叫大数据? 麦肯锡全球研究所给出的定义是:一 种...

    C语言入门三子棋游戏Sanzi-chess-game.zip

    编程语言和开发技术:如Java、$C++、Python、JavaScript、Ruby等。 数据库技术:如关系型数据库(如MySQL、Oracle、SQL Server)和非关系型数据库(如MongoDB、Redis)等。 前端开发:HTML、CSS、JavaScript等用于...

    nosql 入门教程

    第一部分 NoSQL入门 第1章 NoSQL的概念及适用范围 2 1.1 定义和介绍 3 1.1.1 背景与历史 3 1.1.2 大数据 5 1.1.3 可扩展性 7 1.1.4 MapReduce 8 1.2 面向列的有序存储 9 1.3 键/值存储 11 1.4 文档数据库 ...

    全栈数据之门.rar

    全栈数据很好的入门书籍,高清带书签。以数据分析领域最热的Python语言为主要线索,介绍了数据分析库numpy、Pandas与机器学习库scikit-learn,使用了可视化环境Orange 3来理解算法的一些细节。对于机器学习,既有...

    Spark学习之路【SparkSQL入门解析】

    Spark SQL可以使用SQL或熟悉的DataFrame API在Spark程序中查询结构化数据,可在Java,Scala,Python和R中使用 【2.2】统一的数据访问方式 DataFrame和SQL提供了一种访问各种数据源的通用方法,包括Hive,Avro,...

    luigi-warehouse:由luigi驱动的分析仓库堆栈

    路易吉仓库 在Groupon上的样板实现 是一个Python软件包,可帮助您构建批处理作业的复杂管道。 它处理依赖关系解析,工作流管理,可视化,处理故障,命令行集成等 ...入门 包括一些示例工作流程。 假

    全栈数据之门 , 任柳江 pdf

    任柳江 pdf 高清 带目录 扫描版 &lt;br/&gt;《全栈数据之门》以数据分析领域最热的Python语言为主要线索,介绍了数据分析库numpy、Pandas与机器学习库scikit-learn,使用了可视化环境Orange 3来理解算法的一些细节。...

    guofei9987.github.io:我的博客

    0-读论文(7篇) 文章编号 文章译文 链接 0 【读论文】先知 1个 【论文笔记】在神经网络中提取知识 2 【论文笔记】深层神经网络很容易被愚弄 ... 【论文笔记】深度神经网络的特征如何可传递 ...打包Python

    hiveinvite:声明并创建配置单元帐户,并通过链接或电子邮件邀请朋友或陌生人

    通过链接或电子邮件声明并创建Hive帐户并创建邀请的网站 入门 这些说明将为您提供项目的副本,并在新的debian / ubuntu上运行 先决条件 使用apt安装的软件包 apt install git \ sqlite3 \ python3-iniparse \ ...

    java连接sqoop源码-hadoopdev:开发者

    部署快速入门 ClouderaVM。 检查您是否安装了所有这些服务: 高密度文件系统 蜂巢 水槽 Sqoop 纱 动物园管理员 2. 实现随机事件生产者 使用 Java、Scala 或 Python 实现事件生产者。 每个事件消息描述单个产品购买。...

Global site tag (gtag.js) - Google Analytics