如何阅读Pig中的行李列表?
我试过了:
grunt> cat sample.txt
{a,b},{},{c,d}
grunt> data = LOAD 'sample.txt' AS (a:bag{}, b:bag{}, c:bag{});
grunt> DUMP data
({},,)
Run Code Online (Sandbox Code Playgroud)
将数据读入Pig的默认方法是PigStorage('\t')- 也就是说,它假定您的数据是以制表符分隔的.你的是逗号分隔的.所以你应该写LOAD 'sample.txt' USING PigStorage(',') AS....
但是,您的数据不是正确的Pig包格式.请记住,一个包是元组的集合.如果您无法预处理输入,则必须编写UDF来解析您给出的表单的输入.所以这应该工作:
grunt> cat tmp/data.txt
{(a),(b)},{},{(c),(d)}
grunt> data = LOAD 'tmp/data.txt' USING PigStorage(',') AS (a:bag{}, b:bag{}, c:bag{});
grunt> DUMP data;
(,,{})
Run Code Online (Sandbox Code Playgroud)
什么地方出了错?输入字段separator(,)与行李记录分隔符相同这一事实令Pig感到困惑.它分析你输入到田间地头{(a),(b)}和{},这就是为什么只有第三场最终被一个袋子.这就是为什么你会看到像这样的警告信息Encountered Warning FIELD_DISCARDED_TYPE_CONVERSION_FAILED 2 time(s).
如果可以,尝试使用制表符或空格(或分号,或......)而不是逗号:
grunt> cat tmp/data.txt
{(a),(b)} {} {(c),(d)}
grunt> data = LOAD 'tmp/data.txt' AS (a:bag{}, b:bag{}, c:bag{});
grunt> DUMP data;
({(a),(b)},{},{(c),(d)})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3721 次 |
| 最近记录: |