Apache Pig 存储分隔符
Posted
技术标签:
【中文标题】Apache Pig 存储分隔符【英文标题】:Apache Pig store delimiters 【发布时间】:2016-02-25 08:20:07 【问题描述】:我正在使用 Pig Latin 将值从别名存储到 HDFS。别名在其一个字段中包含一个分号。
dump A;
(Richard & John, 1993)
(Albert, 1994)
显示 HDFS 中数据的表格,但分号使 John 转到下一列。
|姓名 |年份 | |-------------|------| |理查德& |约翰 | |阿尔伯特 | 1994 |尝试像这样使用商店也无法按预期工作:
STORE A INTO '/user/hive/warehouse/test.db/names' using PigStorage('\t');
但即使告诉 PigStore 使用制表符作为分隔符,分号也会破坏表格数据。我该如何解决?
【问题讨论】:
【参考方案1】:我只是在本地创建一个文件假设 a.txt 并将您的数据复制到该文件中。
(Richard & John, 1993)
(Albert, 1994)
现在我看到您的数据不是制表符分隔符形式,这就是它在分号部分后拆分的原因。所以为了解决这个问题,我只需要这样的查询
data = load '/home/hduser/Desktop/a.txt' using PigStorage(',');
dump data;
我的输出结果是这样的
((Richard & John, 1993))
((Albert, 1994))
我用这个分割它
,
因为您的数据看起来像这样的分隔符。
注意:我在本地文件系统上运行它。所以要在本地运行它,你必须使用这个命令
pig -x local
启动你的猪并给出你的相关路径。
【讨论】:
在 PigStorage 函数中更改分隔符不起作用。我在创建表中使用的分隔符似乎是 apache pig 正在查找的分隔符。【参考方案2】:好像创建表有问题。
create table test.names
(
name varchar(40),
year varchar(40)
)
row format delimited fields terminated by '\073'
lines terminated by '\n';
我使用的分隔符是 \073(分号),所以更改 PigStorage 分隔符没有效果。
我正在使用 \072(双冒号),它现在正在工作。我认为任何其他分隔符都可以工作,只要它不是输入数据中的常见或可能的字符。
【讨论】:
以上是关于Apache Pig 存储分隔符的主要内容,如果未能解决你的问题,请参考以下文章