apache-pig - Apache Pig 只加载第一个嵌套元组
问题描述
我使用官方文档中的确切示例:
我有data.txt:
(3,8,9) (mary,19)
(1,4,7) (john,18)
(2,5,8) (joe,18)
我跑:
A = LOAD 'data.txt' AS (F:tuple(f1:int,f2:int,f3:int),T:tuple(t1:chararray,t2:int));
dump A
我总是得到:
((3,8,9),)
((1,4,7),)
((2,5,8),)
第二个嵌套元组从未加载。我尝试了 0.16.0 和 0.17.0 的两个版本。
解决方案
问题应该出在您创建的数据文件上。在创建数据文件时,两个元组之间应该有一个制表符作为数据文件中的分隔符。如果有空格,那么我们需要相应地更改负载查询。
a) 以制表符(\t) 作为分隔符或分隔符。
grunt> A = LOAD '/home/ec2-user/data' AS (F:tuple(f1:int,f2:int,f3:int),T:tuple(t1:chararray,t2:int));
grunt> DESCRIBE A;
A: {F: (f1: int,f2: int,f3: int),T: (t1: chararray,t2: int)}
grunt> dump A;
((3,8,9),(mary,19))
((1,4,7),(john,18))
((2,5,8),(joe,18))
b) 使用单个空格 ( ) 作为分隔符或分隔符。
grunt> A = LOAD '/home/ec2-user/data' AS (F:tuple(f1:int,f2:int,f3:int),T:tuple(t1:chararray,t2:int));
grunt> DESCRIBE A;
A: {F: (f1: int,f2: int,f3: int),T: (t1: chararray,t2: int)}
grunt> dump A;
((3,8,9),)
((1,4,7),)
((2,5,8),)
#Use PigStorage(' ') 如果您仍想使用空格作为文件的分隔符。
grunt> A = LOAD '/home/ec2-user/data' USING PigStorage(' ') AS (F:tuple(f1:int,f2:int,f3:int),T:tuple(t1:chararray,t2:int));
grunt> DESCRIBE A;
A: {F: (f1: int,f2: int,f3: int),T: (t1: chararray,t2: int)}
grunt> dump A;
((3,8,9),(mary,19))
((1,4,7),(john,18))
((2,5,8),(joe,18))
推荐阅读
- hangouts-chat - 我无法在谷歌聊天中获得“配置 webhook”选项
- mysql - MySQL 错误 1044/1045 拒绝用户访问
- angular - Rxjs timeout() 运算符不在管道中工作
- javascript - 如何使用 react-window 跨行创建动态大小的列?
- snowflake-cloud-data-platform - 将文件从本地上传到雪花表阶段时出现问题
- php - 对集合 Laravel 进行过滤后获取分页
- javascript - 使用 react axios 下载的 zip 文件在服务器中损坏
- python-3.8 - 在python3中计算dict中的键
- python - 如何创建 asyncio websocket 客户端的多个实例?
- wordpress - Woocommerce 模板文件不允许使用 div