Uploaded image for project: 'Crunch (Retired)'
  1. Crunch (Retired)
  2. CRUNCH-133

Add Aggregator support for combineValues ops on secondary keys via maps and collections

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Open
    • Minor
    • Resolution: Unresolved
    • None
    • None
    • None
    • None

    Description

      Sawzall has a neat trick where you can do aggregations on secondary keys via maps, which is useful in cases where you might want to aggregate some data at (for example) both a country and at a city level within a single MapReduce job. We had a thread on crunch-user about this pattern:

      http://mail-archives.apache.org/mod_mbox/incubator-crunch-user/201212.mbox/%3CCAH29n6O-aHXTPHCRpSuAkAGUjvDR%3D56%3D-OLq9K9mZje%2BwVB4-Q%40mail.gmail.com%3E

      The pattern ends up looking something like this:

      // Define a table that has long values at both the K and the <K, String> levels.
      PTable<K, Pair<Long, Map<String, Long>>> in = ...;

      // Define and apply an Aggregator that can handle sums at both levels within a single MR job.
      Aggregator<Pair<Long, Map<String, Long>>> a = pairAggregator(SUM_LONGS(), map(Aggregators.SUM_LONGS()));
      PTable<K, Pair<Long, Map<String, Long>>> out = in.groupByKey().combineValues(a);

      ...which would run substantially faster than executing two dependent MR jobs, one that did the city aggregation and then a second follow-up job that did the country aggregation.

      Attachments

        1. CRUNCH-133.patch
          16 kB
          Josh Wills

        Activity

          People

            Unassigned Unassigned
            jwills Josh Wills
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated: