Apache Pig的一些基础概念及用法总结(1)

本文是Apache Pig中文教程,介绍其基础概念与用法。Pig是处理大规模数据的高级查询语言,配合Hadoop使用效果佳。文中讲解了关系、包等概念,通过计算多维度组合平均值等实例展示用法,还提及配置语法高亮、统计行数等内容,最后对读者使用问题进行解答。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

19 条评论

  1. chali

    程序如下:
    register LzoPigStorage.jar
    A = load ‘data.txt’ using PigStorage(‘;’);
    store A into ‘data222′ using com.twitter.elephantbird.pig.store.LzoPigStorage();
    出现错误如下:
    ERROR org.apache.pig.tools.grunt.Grunt – ERROR 2998: Unhandled internal error. com/twitter/elephantbird/mapreduce/input/LzoTextInputFormat

    请问我该如何解决?求指导

    • 我建议你先从elephant-bird学起吧,这个问题我一眼看不出是什么原因,深究起来估计也不是几个回复就可以搞定的,等你在Hadoop环境中(包括Pig)配置好了LZO,可以用Java程序通过elephant-bird读取LZO压缩的数据了,问题就解决得差不多了,想靠问我来解决所有这些问题是不现实的。至少我所在的team当时解决各种各样的问题都是用Google以及自己试验解决的,整个架构整合起来花的时间不算少的。我只能建议你多Google了

  2. juneey

    hbase-0.90.4-cdh3u3;hadoop-0.20.2-cdh3u3;zookeeper-3.3.4-cdh3u3;pig-0.10.0;hive-0.8.0-bin
    这是我的配置,怎么Pig不能操作HBase数据,提示错误为:ERROR org.apache.hadoop.hbase.mapreduce.TableOutputFormat – org.apache.hadoop.hbase.NotServingRegionException: org.apache.hadoop.hbase.NotServingRegionException: Region is not online: -ROOT-,,0

    该怎样解决???

  3. juneey

    请问,能不能把Pig操作HBase数据那部分说的再详细点,包括应该怎么配置。

  4. to tewilove:
    问题1:还是那个回答,我没有load过HBase的数据,所以无法回答你。

    问题2:我的方法比较笨,两步走——如果你的每一行都是“((a,1),(b,1),(c,3))”这样的字符串(最前端包含两个左括号,最右端包含两个右括号),那么,我是先把每一行拆成N行类似于“c,3”这样的字符串,最后得到类似于这样的N行:
    a,1
    b,2
    a,1
    b,1
    c,3
    c,2
    STORE到磁盘上之后,再用写第二个Pig脚本来统计。由于被拆成了N行最简单的形式,所以统计起来就非常容易了。
    拆成N行我是用了正则替换的方法:
    A = LOAD ‘data.txt’ AS (col: chararray);
    A1 = FOREACH A GENERATE REPLACE(col, ‘\\(\\(‘, ‘\\(‘) AS col;
    A2 = FOREACH A1 GENERATE REPLACE(col, ‘\\)\\)’, ‘\\)’) AS col;

    B = FOREACH A2 GENERATE REPLACE(col, ‘\\),\\(‘, ‘\\)\n\\(‘) AS col;
    C = FOREACH B GENERATE REPLACE(col, ‘\\(‘, ”) AS col;
    D = FOREACH C GENERATE REPLACE(col, ‘\\)’, ”) AS col;
    STORE D INTO ‘/home/abc/temp’;

    第二个job:
    A = LOAD ‘/home/abc/temp’ AS (col1: chararray, col2: int) USING PigStorage(‘,’);
    B = GROUP A BY col1;
    C = FOREACH B GENERATE FLATTEN(group), COUNT(A);
    DUMP C;

    • tewilove

      谢谢,我试试看。第一个的错误原因是分隔符是空格,逗号会算进变量名。第二个简化点说就是怎么把一个chararray按规则展开成bag,似乎可以写UDF看看。

  5. tewilove

    数据格式为((a1,b1),(a2,b2),…),数量不确定,位于一个HBase的column内,这样的schema怎么定义呢。

    • 找一个HBase的loader试试吧,我没有用Pig从HBase中加载过数据,所以在这里无法具体回答你

      • tewilove

        两个小问题:
        1.
        A = LOAD ‘test_logs’ using org.apache.pig.backend.hadoop.hbase.HBaseStorage(‘tag:key, ‘) as (o:chararray);
        正常。
        A = LOAD ‘test_logs’ using org.apache.pig.backend.hadoop.hbase.HBaseStorage(‘tag:key, response:code’) as (o:chararray, c:int);
        缺失key这一列。
        (,200)
        (,304)
        A = LOAD ‘test_logs’ using org.apache.pig.backend.hadoop.hbase.HBaseStorage(‘tag:key, response:code, tag:eclipsed_time’) as (o:chararray, c:int, e:double);
        于是没有返回。

        2. 数据看起来是这样的,但实际上每一行都是chararray:
        ((a,1),(b,2))
        ((a,1),(b,1),(c,3))
        我想找出a,b,c的个数,最好能按后面的数字group一下。

        初学,不好意思。

  6. 楼主,总结的不错,非常受益!
    学习精神和分享精神值得钦佩!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值