使用 pig,如何解析和比较分组项目

Posted

技术标签:

【中文标题】使用 pig,如何解析和比较分组项目【英文标题】:Using pig, How do I parse and comapre a grouped item 【发布时间】:2014-03-24 18:46:54 【问题描述】:

我有

A  B
a, d
a, e
a, y
z, v
z, k
z, o

等等。 B 列是 cararray 类型,包含用 & 分隔的键值对。

例如 - d = 'abc=1&c=1&p=success'

我想弄清楚的——

假设 -

d = 'abc=1&c=1&xyz=23423423'

e = 'xyz=1&it=ssd'

y = 'abc=1&c=1&p=成功'

对于每个“a”,我想知道它是否有 b 列,其中包含相同的 abc 值并且 c=1 和 p = 成功。我还想从 d 和 y 中提取 abc 和 c 的值。

以上面的例子为例-

d 包含 abc=1 和 c=1

y 包含 abc=1 和 p= 成功

所以这满足了我正在寻找的内容,即对于给定的“a”,我的 abc 和 c=1 和 p =success 的值相同。

我开始对我的数据进行分组:

grouped = group data BY (A, B);

这给了我

a, (a,b)(a,e)(a,y)
z, (z,v)(z,k)(z,o)

但在此之后,我对如何比较每个组内的数据以满足上述条件一无所知。

对此的任何帮助表示赞赏。

如果您希望我进一步澄清我的问题,请告诉我。

【问题讨论】:

您应该首先将 B 列中的数据提取到地图中。可能最好用 UDF 来做,但你也可以用正则表达式来做。 【参考方案1】:

由于您只关心查询字符串中的一些字段(我假设就是这样),因此您需要使用 FOREACH 和 STRSPLIT 拆分数据。把它展平,这样你就有了看起来像这样的东西 (a, b) 其中 b 是查询中的单个键/值,例如:abc=1 过滤掉您不关心的键/值对,将它们重新组合在一起,然后按组合的键/值对进行分组。这将为您提供具有相同 b 的每个 a 的列表,其中 b 仅包含 abc=X、c=1 和 p=success

【讨论】:

以上是关于使用 pig,如何解析和比较分组项目的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Pig 将分组记录存储到多个文件中?

如何使用 pig 脚本解析 xml 元素节点?

如何读取 CSV 并生成 json/avro 文件,其中 pig 按第一列的值分组?

使用 pig,如何将混合格式的行解析为元组和一袋元组?

在 Hadoop Pig 中加入和分组

如何解决pig中的“解析时出错。无法实例化”?