2014-10-09 67 views
0

我有一个已知的UUID列表。我想在Pig中执行一个FILTER过滤掉列表中没有包含UUID的记录。在Pig中用UUID过滤

我还没有找到一种方法来指定bytearray文字,以便我可以编写该过滤器语句。

如何通过UUID进行过滤?

(在一个尝试我试着用https://github.com/cevaris/pig-dseHow to FILTER Cassandra TimeUUID/UUID in Pig想我可以通过文字的UUID的chararray过滤,但我得到

grunt> post_creators= LOAD 'cql://mykeyspace/mycf/' using AbstractCassandraStorage; 
2014-10-09 14:56:05,597 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: could not instantiate 'AbstractCassandraStorage' with arguments 'null' 

+0

让我明白:你有两个列表 - 一个带有已知的UUID,另一个带有ID。您想要选择不在UUID列表中的ID。对? – 2014-10-10 06:18:00

+0

不完全。假设我有一个UUID作为猪脚本的参数,(假设它是用户的UUID)。我想通过此UUID过滤存储器中的表。 (我们可以将它扩展为UUID列表作为参数,但同样的原则适用。)我无法弄清楚的是如何在FILTER命令中指定UUID。 – Lifto 2014-10-10 14:46:16

+0

http://pig.apache.org/docs/r0.13.0/basic.html#filter – 2014-10-13 09:26:03

回答

0

使用这条巨蟒UDF

import array 
import uuid 
@outputSchema("uuid:bytearray") 
def to_bytes(uuid_str): 
    return array.array('b', uuid.UUID(uuid_str).bytes) 

这样的过滤器:

users = FILTER users by user_id == my_udf.to_bytes('dd2e03a7-7d3d-45b9-b902-2b39c5c541b5');