【问题标题】:How do I split in Pig a tuple of many maps into different rows如何在 Pig 中将许多地图的元组拆分为不同的行
【发布时间】:2014-11-20 12:19:37
【问题描述】:

我在 Pig 中有一个如下所示的关系:

([account_id#100,
 timestamp#1434,
 id#900],

[account_id#100,
 timestamp#1434,
 id#901],

[account_id#100,
 timestamp#1434,
 id#902])

如您所见,我在一个元组中有三个地图对象。上面的所有数据都在关系中的第 0 美元字段内。因此,上面的数据与单个 bytearray 列有关。

数据加载如下:

data = load 's3://data/data' using com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad');

DESCRIBE data;

data: {bytearray}

如何将这个数据结构拆分成三行,输出如下?

data: {account_id:chararray, timestamp:chararray, id:int}
(100, 1434,900)
(100, 1434,901)
(100, 1434,902)

【问题讨论】:

  • 你能提供你的文件内容吗?您提供的关系不是 JSON 格式,我无法使用 com.twitter.elephantbird.pig.load.JsonLoader 来加载它 - 我得到 0 行
  • 我认为您应该为 JsonLoader 提供一个模式,请参见此处的示例:pig.apache.org/docs/r0.12.1/func.html#jsonloadstore
  • 您能否提供一个数据文件,我们可以加载该文件以获取您的输入?

标签: hadoop dictionary tuples apache-pig elephantbird


【解决方案1】:

如果没有样本输入数据,很难猜出您的问题。如果这是一个中间结果,则使用 STORE 将其写出,并将输出文件作为我们可以输入的内容进行尝试。我能够使用 STRSPLIT 解决此问题,但不确定您的意思是输入是单列单行还是这三个不同的行具有同一列。

在任何一种情况下,使用 FLATTEN 运算符展平数据并稍后使用 STRSPLIT 应该会有所帮助。如果我获得更多信息和输入数据,我可以给出一个可行的例子。

Data -> FLATTEN to get out of bag -> STRSPLIT over "," in a FOREACH,GENERATE

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2015-03-02
    • 1970-01-01
    相关资源
    最近更新 更多