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

Posted

技术标签:

【中文标题】仅使用 Pig Latin 在 Pig 中加载具有不同分隔符的非结构化数据【英文标题】:Loading unstructered data with different delimiters in Pig using PigLatin only 【发布时间】:2015-06-25 21:58:08 【问题描述】:

您好,我正在尝试仅使用 PigLatin 将以下数据(包括不同的分隔符并且是非结构化的)加载到 Pig 中,而不使用 Java 准备数据。

输入:

1234 #one,#two,#three
5679 #one,#two
1234 #one

输出我要查找的内容:

1234 #one
1234 #two
1234 #three
5678 #one
5678 #two
1234 #one

有什么想法吗?这在Pig中甚至可能吗?提前非常感谢!

【问题讨论】:

我们可以使用 ' ' (空格作为分隔符)加载数据,然后使用 TOKENIZE 函数格式化逗号分隔的值并展平数据以达到目的。 【参考方案1】:

猪脚本:

A = LOAD 'a.csv' AS USING PigStorage(' ') (key:chararray, value:chararray);
B = FOREACH A GENERATE key, FLATTEN(TOKENIZE(value, ','));
DUMP B;

输入:a.csv:

1234 #one,#two,#three
5679 #one,#two
1234 #one

输出:转储 B:

(1234,#one)
(1234,#two)
(1234,#three)
(5679,#one)
(5679,#two)
(1234,#one)

【讨论】:

以上是关于仅使用 Pig Latin 在 Pig 中加载具有不同分隔符的非结构化数据的主要内容,如果未能解决你的问题,请参考以下文章

基于感兴趣的日期范围作为参数输入限制在 Pig Latin 中加载日志文件

如何在 Pig Latin 中每行加载一个带有 JSON 数组的文件

Pig:使用 .pig_schema 模式文件加载数据

在 PIG 中加载 CSV 文件

在 pig 中加载多个文件

在 Hortonworks Sandbox 内的 Pig 脚本中加载 JSON 文件