zoukankan      html  css  js  c++  java
  • LOAD和PigStorage的一些测试例子 (转)

    原地址:http://f.dataguru.cn/thread-233064-1-1.htm

    因为理解上的错误,在这里被搞糊涂了。
    通过做测试,应该算是澄清了,所以写出来。

    假设有个文件叫test,该文件的内容如下(ip地址和url之间有一个空格):
    127.0.0.1 dataguru.cn/forum1
    192.168.1.1 dataguru.cn/forum2

    1.
    rs1 = LOAD 'test';
    该命令原模原样把test文件的内容载入,rs1只有1个属性
    DUMP rs1;
    结果如下:
    (127.0.0.1 dataguru.cn/forum1)
    (192.168.1.1 dataguru.cn/forum2)

    注意虽然上面的结果里有个空格,但是那只是因为源文件test中就是这样的,这里只有1个属性,不代表空格前后有2个属性。
    rs2 = FOREACH rs1 GENERATE $1;
    DUMP rs2;
    结果如下:
    ()
    ()
    上面的结果说明第2个属性不存在($1是指第2个属性)
    rs2 = FOREACH rs1 GENERATE $0;
    DUMP rs2;

    结果如下:
    (127.0.0.1 dataguru.cn/forum1)
    (192.168.1.1 dataguru.cn/forum2)

    上面的结果也证实了rs1只存在1个属性,整行内容都是属性的内容。

    2.
    rs1 = LOAD 'test' USING PigStorage(' ');
    上面的命令,指出载入test文件内容的时候以一个空格作为分隔符
    DUMP rs1;
    结果如下:
    (127.0.0.1,dataguru.cn/forum1)
    (192.168.1.1,dataguru.cn/forum2)

    注意上面的结果里出现了逗号,表明rs1有多个属性了,逗号前后各1个属性。
    rs2 = FOREACH rs1 GENERATE $1;
    DUMP rs2;
    结果如下:

    (dataguru.cn/forum1)
    (dataguru.cn/forum2)
    同理:
    rs2 = FOREACH rs1 GENERATE $0;
    DUMP rs2;

    结果如下:
    (127.0.0.1)
    (192.168.1.1)



    再次假设文件test的内容如下(ip地址和url之间有一个逗号):
    127.0.0.1,dataguru.cn/forum1
    192.168.1.1,dataguru.cn/forum2

    则:
    rs1 = LOAD 'test';
    DUMP rs1;
    结果为:
    (127.0.0.1,dataguru.cn/forum1)
    (192.168.1.1,dataguru.cn/forum2)

    另:
    rs1 = LOAD 'test' USING PigStorage(',');
    DUMP rs1;

    结果为:
    (127.0.0.1,dataguru.cn/forum1)
    (192.168.1.1,dataguru.cn/forum2)


    看起来好像2个命令的结果一样,实际上它们是不一样的,上面的结果只有1个属性,下面的结果是2个属性,原因前面已经讲了。

    再再次假设test的文件内容如下(ip地址和url之间用一个tab键分隔):
    127.0.0.1 dataguru.cn/forum1
    192.168.1.1 dataguru.cn/forum2

    则:
    rs1 = LOAD 'test';
    DUMP rs1;
    结果为:
    (127.0.0.1,dataguru.cn/forum1)
    (192.168.1.1,dataguru.cn/forum2)

    另:
    rs1 = LOAD 'test' USING PigStorage(' ');
    DUMP rs1;

    结果为:
    (127.0.0.1,dataguru.cn/forum1)
    (192.168.1.1,dataguru.cn/forum2)



    这次,这2个结果是一模一样的。

    总结:
    1.当我们只用LOAD命令,后面不跟USING PigStorage的时候,只能对包含tab键的文件区分属性,不含tab键的行,做为1个属性处理。
    2.当我们用LOAD+USING PigStorage的时候,在PigStorage里面可以指定分隔符,如','    ' '    '-'     ' '等等,但是,PigStorage看起来还不支持多个字符做为分隔符,比如我想指定'--'做为分隔符就不行。
    3.当我们用DUMP命令查看结果的时候,如果结果里没有出现逗号,那就表明结果只有1个属性;如果结果里出现了逗号,有可能是多个属性;也有可能是1个属性,该属性的内容里本身包含了逗号。

  • 相关阅读:
    关于virtualbox配置centos7的网络问题
    centos7在命令行下安装图形界面
    ajax后台返回指定的错误码
    h5前端animate等js特效问题汇总
    tp5中的input助手函数
    使网页滑动效果更加流畅
    关于vagrant环境下项目中图片缓存的问题
    h5图片预览功能
    微信jssdk遇到的一些问题汇总
    curl请求curl_exec返回false,curl_error返回空
  • 原文地址:https://www.cnblogs.com/hadoop-dev/p/5913224.html
Copyright © 2011-2022 走看看