【问题标题】:Cascading groupby Example级联 groupby 示例
【发布时间】:2016-10-06 12:25:09
【问题描述】:

我最近不得不做一个级联工作。我以前从来没有使用过分布式系统,所以我在理解如何使它工作时遇到了一些麻烦。

我有一个包含一堆桶的配置文件:

Bucket{
  bucket_name: "X"
  input_path: "s3://..."
  key_column: 1
  value_column: 2
  multivalue: false
  default_value: 
  type_column: int
} 
...

基本上,我所要做的就是使用它来收集一堆文件(每个文件都像一个 tsv 表,将 url 键映射到某个值),然后按 url 分组。

所以基本上,轮廓是这样的:

A --> |group |
B --> |by    |--> output 
C --> |url   | 

我想知道以下逻辑是否正确: 1)我需要为每个桶创建一个水龙头,即

Tap inputTap = new GlobHfs(new TextLine(), bucket.getInputPath());

2)我需要从所有管道中创建一个 EACH 管道(这部分我不确定,我是否需要每个管道,我的过滤器/功能应该是什么?)。现在,我创建了一个每个管道,它按制表符拆分行。

RegexSplitGenerator splitter = new RegexSplitGenerator("\t");
Pipe tokenizedPipe = bucket.getBucketName(), new Field("Line"), splitter));

3) 创建一个 groupby 管道,将所有这些标记化管道组合在一起。我不确定如何强制 groupby 管道仅选择关键列,但我现在使用的技术是:

Pipe finalPipe = new Groupby("Output Pipe", inputPipes, groupFields);

那么这是解决这个问题的正确逻辑吗?还是我的某些步骤是多余的或不正确的?

谢谢!

【问题讨论】:

    标签: java hadoop distributed cascading


    【解决方案1】:

    我觉得你的想法不错。如果在点击读取输入文件时拆分记录,则可以跳过第 2 步。

    Tap inputTap = new Hfs(new TextDelimited("\t"), inputPath);
    

    Cascading for the Impatient 涵盖了如何实现你想要实现的,值得一看。

    【讨论】:

      猜你喜欢
      • 2012-06-29
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 2011-12-30
      • 2019-04-12
      相关资源
      最近更新 更多