我正在尝试使用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
但似乎非常慢。
有人可以推荐一种不同的方法吗?
答案 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