使用 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,如何解析和比较分组项目的主要内容,如果未能解决你的问题,请参考以下文章