类似splunk记录的pig加载程序

iq0todco  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(434)

我尝试使用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

但是它看起来非常慢。
有人能推荐一种不同的方法吗?

vojdkbi0

vojdkbi01#

似乎有一种方法是使用python自定义项。这个解决方案从包到元组都受到了很大的启发
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` 

相关问题