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 转到下一列。

|姓名 |年份 | |-------------|------| |理查德&amp |约翰 | |阿尔伯特 | 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 存储分隔符的主要内容,如果未能解决你的问题,请参考以下文章

具有多个分隔符的 apache pig 加载数据

对存储在 Hive 中的数据运行 Pig 查询

Pig 使用自定义行/记录分隔符存储文件

Apache Pig 处理带有引号的字段的 CSV

仅使用 Pig Latin 在 Pig 中加载具有不同分隔符的非结构化数据

使用管道连字符管道将数据加载到 Pig |-|分隔符