2014-10-09 59 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');