【问题标题】:Write to multiple outputs by key Scalding Hadoop, one MapReduce Job通过 key Scalding Hadoop 写入多个输出,一个 MapReduce Job
【发布时间】:2014-07-22 13:29:21
【问题描述】:

如何在单个 Map Reduce 作业中使用 Scalding(/cascading) 根据键写入多个输出。我当然可以对所有可能的键使用.filter,但这是一种可怕的黑客攻击,会激发很多工作。

【问题讨论】:

    标签: scala hadoop mapreduce cascading scalding


    【解决方案1】:

    Scalding 中有TemplatedTsv(0.9.0rc16 及以上版本),与 Cascading TemplateTsv 完全相同。

    Tsv(args("input"), ('COUNTRY, 'GDP))
    .read
    .write(TemplatedTsv(args("output"), "%s", 'COUNTRY))
    // it will create a directory for each country under "output" path in Hadoop mode.
    

    【讨论】:

    • 这看起来比我要求的更灵活!!谢谢。你能说这是哪个Scalding版本吗?是0.10.0及以上吗?还是 0.9.0?
    • 从代码库看,它似乎从 0.9.0rc16 版本开始可用。
    • @morazow 有没有办法删除模板字符串中使用的字段?在您的示例中,基本上我希望结果文件在结果输出中只有“GDP”字段。
    • @Syllepsis 这真是个好问题;但是,我不知道当前的 TemplatedTsv 实现是否可行。但是,您可以像这里github.com/twitter/scalding/blob/0.11.0/scalding-core/src/main/… 一样制作另一个您自己的 MyTemplatedTsv 并添加“覆盖 val fields = Fields.ALL”并指定在调用该水龙头时要写入的字段。如果你测试一下,可以在这里回复吗?
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      级联用户组上的This suggestion 建议使用Cascading TemplateTap。不知道如何将其连接到 Scalding。

      【讨论】:

      • 这看起来很有希望,愿意为人们的复制和粘贴需求提供 Scalding 代码吗? :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多