用猪拉丁语分解地图 [chararray]
Breaking down a map[chararray] in pig latin
我对 pig latin 很陌生,所以请原谅我对以下问题的无知。我继承了一些主要执行以下操作的代码:
USERS = LOAD 'hbase://some_table' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('s:*', '-caster HBaseBinaryConverter --limit some_limit') AS (user_map:map[chararray]);
现在,如果我转储 USERS
,我会得到如下内容(假数据)
([n1#{"s":{"added": 1430668638000, "lastseen": 1430668638000, "expires": 1433260638000}},n2#{"s":{"added": 1430668638000, "lastseen": 1430668638000, "expires": 1433692638000}},n22#{"segment":{"added": 1430668638000, "lastseen": 1430668638000, "expires": 1433260638000}},n3#{"s":{"added": 1430668638000, "lastseen": 1430668638000, "expires": 1433692638000}},n4#{"segment":{"added": 1430668638000, "lastseen": 1430668638000, "expires": 1433692638000}}])
([n8#{"s":{"added": 1428792426000, "lastseen": 1428792426000, "expires": 1431816426000}},n9#{"segment":{"added": 1428792426000, "lastseen": 1428792426000, "expires": 1431816426000}},n11#{"segment":{"added": 1428792426000, "lastseen": 1428792426000, "expires": 1431816426000}}])
本质上,我想获得输出中的 n*
值。但我不确定如何将它们从这个模式中分解出来。任何帮助将不胜感激。
为了进一步解释我的问题,也许我对 map:[chararray]
架构(以及如何操作它)的理解还不够
EDIT 我想要的预期输出是将所有 n*
信息存储到一个名为 TITLES
的变量中。这样当我做 DUMP TITLES
我会得到以下
n1#
n2# ...
能够通过编写 python UDF 来回答我自己的问题。在 Pig 中,调用看起来像这样
N_S = FOREACH USERS GENERATE my_udfs.translate_map(user_map)
我的 python udf 看起来像
@outputSchema("doc:chararray")
def translate_map(input):
n_str = ""
for k, v in input.items():
n_str += str(key)
n_str += " "
return n_str
我对 pig latin 很陌生,所以请原谅我对以下问题的无知。我继承了一些主要执行以下操作的代码:
USERS = LOAD 'hbase://some_table' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('s:*', '-caster HBaseBinaryConverter --limit some_limit') AS (user_map:map[chararray]);
现在,如果我转储 USERS
,我会得到如下内容(假数据)
([n1#{"s":{"added": 1430668638000, "lastseen": 1430668638000, "expires": 1433260638000}},n2#{"s":{"added": 1430668638000, "lastseen": 1430668638000, "expires": 1433692638000}},n22#{"segment":{"added": 1430668638000, "lastseen": 1430668638000, "expires": 1433260638000}},n3#{"s":{"added": 1430668638000, "lastseen": 1430668638000, "expires": 1433692638000}},n4#{"segment":{"added": 1430668638000, "lastseen": 1430668638000, "expires": 1433692638000}}])
([n8#{"s":{"added": 1428792426000, "lastseen": 1428792426000, "expires": 1431816426000}},n9#{"segment":{"added": 1428792426000, "lastseen": 1428792426000, "expires": 1431816426000}},n11#{"segment":{"added": 1428792426000, "lastseen": 1428792426000, "expires": 1431816426000}}])
本质上,我想获得输出中的 n*
值。但我不确定如何将它们从这个模式中分解出来。任何帮助将不胜感激。
为了进一步解释我的问题,也许我对 map:[chararray]
架构(以及如何操作它)的理解还不够
EDIT 我想要的预期输出是将所有 n*
信息存储到一个名为 TITLES
的变量中。这样当我做 DUMP TITLES
我会得到以下
n1#
n2# ...
能够通过编写 python UDF 来回答我自己的问题。在 Pig 中,调用看起来像这样
N_S = FOREACH USERS GENERATE my_udfs.translate_map(user_map)
我的 python udf 看起来像
@outputSchema("doc:chararray")
def translate_map(input):
n_str = ""
for k, v in input.items():
n_str += str(key)
n_str += " "
return n_str