我有一个txt文件中的示例数据集(格式:firstname,lastname,age,gender)
(Eric,Ack,27,M),(Jeremy,Ross,29,F)
(Jenny,Dicken,27,F),(Vijay,Sampath,40,M)
(Angs,Dicken,28,M),(Venu,Rao,28,M)
(Mahima,Mohanty,29,F),(Kenny,Oath,28,M)
我正在尝试这样加载数据:
tuple_record = LOAD '~/Documents/Pig_Tuple.txt' USING PigStorage(',') AS (details:tuple(firstname:chararray,lastname:chararray,age:int,sex:chararray));
但这是行不通的:
DUMP tuple_record;
我在运行这个命令时得到了这个结果(即它不返回任何结果)
()
()
()
()
请告知如何加载此数据集。
2条答案
按热度按时间bqjvbblv1#
原因是
tuple
以及each fields
元组内部有same delimiter
(','
). 在这种情况下,pig将解析输入并在模式转换中失败。您可以在控制台中看到以下日志
来解决这个问题
您需要更改元组分隔符
','
去做些不同的事。在下面的例子中,我使用了'#'
作为分隔符而不是','
. 可以使用(','以外的任何分隔符输入文件有两个元组,但在加载模式中只定义了一个元组,因此还需要定义另一个元组。
示例:
输入
Pig手稿:
输出:
更新:
如何将分隔符“”更改为其他内容
选项1:使用sed
这是一个非常简单的选项,通过使用sed命令替换
'),('
图案到')#('
模式,以便分隔符将从','
至'#'
在同一个输入文件中(note:take backup 执行此sed脚本前输入文件的)选项2:在不更改分隔符的情况下对pigscript进行轻微修改
Pig手稿:
i2byvkas2#
请查看清管器文件的复杂方案部分