原地址: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('\t');
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里面可以指定分隔符,如','    ' '    '-'     '\t'等等,但是,PigStorage看起来还不支持多个字符做为分隔符,比如我想指定'--'做为分隔符就不行。
3.当我们用DUMP命令查看结果的时候,如果结果里没有出现逗号,那就表明结果只有1个属性;如果结果里出现了逗号,有可能是多个属性;也有可能是1个属性,该属性的内容里本身包含了逗号。

LOAD和PigStorage的一些测试例子 (转)的更多相关文章

  1. ORM开发之解析lambda实现完整查询(附测试例子)

    上次讲解了怎么解析匿名对象(ORM开发之解析lambda实现group查询),这次来实现解析二元运算,完成基本条件语法 先看一个表达式 query.Where(b => b.Number == ...

  2. php判断数据库是否连接成功的测试例子

    php判断数据库是否连接成功的测试例子 如果出现数据库配置不正确的错误,请看php与mysql的配置教程: win7系统下如何配置php-Apache-mysql环境 http://www.cnblo ...

  3. php多线程抓取信息测试例子

    php多线程抓取信息测试例子 PHP 5.3 以上版本,使用pthreads PHP扩展,可以使PHP真正地支持多线程.多线程在处理重复性的循环任务,能够大大缩短程序执行时间. PHP扩展下载:htt ...

  4. Go语言学习之斐波那契数列的测试例子和定义常量方法

    ### Go语言学习之斐波那契数列的测试例子和定义常量方法 1.go语言中测试文件必须以test.go结尾,比如:fib_test.go 2.测试文件内的方法必须是Test开头,比如:func Tes ...

  5. 【ELK】Centos7 安装 ELK 7.6.2 和 UI 管理界面以及测试例子

    1. 初始化环境 1.0 初始化环境官网参考 https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config ...

  6. Jmeter负载测试例子

    通过浏览器操作网站在jmeter录屏控制器显示录屏例子,并且通过这例子模拟多用户(线程)来负载测试. 工具/原料   Jmeter 浏览器 1.先在测试计划创建线程组和录制Case   1 1.1 选 ...

  7. jdbc-mysql测试例子和源码详解

    目录 简介 什么是JDBC 几个重要的类 使用中的注意事项 使用例子 需求 工程环境 主要步骤 创建表 创建项目 引入依赖 编写jdbc.prperties 获得Connection对象 使用Conn ...

  8. cglib测试例子和源码详解

    目录 简介 为什么会有动态代理? 常见的动态代理有哪些? 什么是cglib 使用例子 需求 工程环境 主要步骤 创建项目 引入依赖 编写被代理类 编写MethodInterceptor接口实现类 编写 ...

  9. dom4j的测试例子和源码详解(重点对比和DOM、SAX的区别)

    目录 简介 DOM.SAX.JAXP和DOM4J xerces解释器 SAX DOM JAXP DOM解析器 获取SAX解析器 DOM4j 项目环境 工程环境 创建项目 引入依赖 使用例子--生成xm ...

随机推荐

  1. ios 在程序中使用iCloud

    注意,这里说的使用icould不是用icloud进行系统备份,那个功能不需要我们写代码,备份到icloud的东西我们也不能操作.我们指的是以下这3种icloud使用方法: 这里有3中使用方法, Key ...

  2. Mac Mysql mysql_secure_installation Error: Access denied for user 'root'@'localhost' (using password: YES)

    mysql由brew安装, 期间好像自动更新了一次 然后再次执行mysql_secure_installation, 输入root密码后报错, 重装mysql还是不行 Error: Access de ...

  3. 禁止Linux用户登录方法

    我们在做系统维护的时候,希望个别用户或者所有用户不能登录系统,保证系统在维护期间正常运行.这个时候我们就要禁止用户登录. 1.禁止个别用户登录.比如禁止lynn用户登录. passwd -l lynn ...

  4. Debian 配置apt-get源

    1.配置apt-get源 cp  /etc/apt/sources.list  /etc/apt/sources.listbak   #备份原有配置文件       nano  /etc/apt/so ...

  5. 深入浅出JMS(一)——JMS简介

    如果手机只能进行实时通话,没有留言和短信功能会怎么样?一个电话打过来,正好没有来得及接上,那么这个电话要传递的信息肯定就收不到了.为什么不能先将信息存下来,当用户需要查看信息的时候再去获得信息呢?伴随 ...

  6. mysql 删除重复数据保留只保留一条

    SELECT * FROM (SELECT addTime FROM motorcade.car_msg_info GROUP BY addTime HAVING COUNT(addTime) > ...

  7. 中等难度SQL语句(存储过程,分页,拼接字段、游标,日期类型转换,动态行转列,视图)汇总

    一.创建存储过程 if Exists(select name from sysobjects where NAME = 'sp1LoginUser' and type='P')drop procedu ...

  8. 如何把一个excel工作薄中N个工作表复制到另一个工作薄中

    一般遇到标题这样的情况,许多人可能会一个一个的复制粘贴,其实完全不必那么麻烦. 你可以按以下步骤来操作: 第一步:打开所有要操作的excel工作薄\n 第二步:按住Shift键,选择所有要复制的工作表 ...

  9. log4j介绍以及使用教程

    一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接 口服务 器.NT的事件记录器.UNIX Syslog ...

  10. mongodb 3.2 用户权限管理配置

    使用mongodb 有段时间了,由于是在内网使用,便没有设置权限,一直是裸奔. 最近有时间,研究了下mongodb 3.2 的用户权限配置,网上有许多用户权限配置的文章,不过大多是之前版本,有些出入, ...