SPLUNK的Pig LOADER就像唱片一样

时间:2014-12-19 15:29:08

标签: hadoop apache-pig splunk

我正在尝试使用PIG从HDFS读取数据,其中文件包含如下所示的行:

"key1"="value1", "key2"="value2", "key3"="value3"
"key1"="value10", "key3"="value30"

在某种程度上,数据行基本上是字典:

{"key1":"value1", "key2":"value2", "key3":"value3"}
{"key1":"value10", "key3":"value30"}

我可以通过以下方式轻松阅读和转储部分数据:

data = LOAD '/hdfslocation/weirdformat*' as PigStorage(',');
sampled = SAMPLE data 0.00001;
dump sampled;

我的问题是我无法有效地解析它。我试过用

org.apache.pig.piggybank.storage.MyRegExLoader

但似乎非常慢。

有人可以推荐一种不同的方法吗?

1 个答案:

答案 0 :(得分:0)

似乎有一种方法是使用python UDF。 此解决方案受到bag-to-tuple

的启发

myudfs.py写:

#!/usr/bin/python

def FieldPairsGenerator(dataline):
    for x in dataline.split(','):
        k,v = x.split('=')
        yield (k.strip().strip('"'),v.strip().strip('"'))

@outputSchema("foo:map[]")
def KVDataToDict(dataline):
    return dict( kvp for kvp in FieldPairsGenerator(dataline) )

然后编写以下Pig脚本:

REGISTER 'myudfs.py' USING jython AS myfuncs;
data = LOAD 'whereyourdatais*.gz' AS (foo:chararray);
A = FOREACH data GENERATE myfuncs.KVDataToDict(foo);

A现在将数据存储为PigMap