Return-Path: X-Original-To: apmail-crunch-user-archive@www.apache.org Delivered-To: apmail-crunch-user-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 07F5E18F7D for ; Wed, 24 Feb 2016 20:20:50 +0000 (UTC) Received: (qmail 19101 invoked by uid 500); 24 Feb 2016 20:20:49 -0000 Delivered-To: apmail-crunch-user-archive@crunch.apache.org Received: (qmail 19057 invoked by uid 500); 24 Feb 2016 20:20:49 -0000 Mailing-List: contact user-help@crunch.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@crunch.apache.org Delivered-To: mailing list user@crunch.apache.org Received: (qmail 19047 invoked by uid 99); 24 Feb 2016 20:20:49 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 24 Feb 2016 20:20:49 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 867E51804AB for ; Wed, 24 Feb 2016 20:20:49 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.179 X-Spam-Level: * X-Spam-Status: No, score=1.179 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=2, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001] autolearn=disabled Authentication-Results: spamd3-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id ffH-xXuDvs8U for ; Wed, 24 Feb 2016 20:20:48 +0000 (UTC) Received: from mail-ob0-f177.google.com (mail-ob0-f177.google.com [209.85.214.177]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id 7145D5FAE4 for ; Wed, 24 Feb 2016 20:20:47 +0000 (UTC) Received: by mail-ob0-f177.google.com with SMTP id jq7so28900891obb.0 for ; Wed, 24 Feb 2016 12:20:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :content-type; bh=EQpw7PjY2UYozXBset47WKItKe/oUn4x7kYTRjRt8Zs=; b=X8P5mrBDmuzO/a6M2cylQVOawnP/lW+1xjcf/inJZ/zX7g7X3ksDlQ92fPrsf1VWjs lOlimii6A3CRBKpFplAdLefxsyk0U6B2vVu8Vc4yqoGUjW1+8swVWuUkNXLmZGAJEc2D Xae6RIMR7MlXgz7Sp29wMnTRgA1XxBAw1Sv47cmbMrZ8TyN1YHuQoj5nOgPG20ATxzyh pMgGmX6gpRe4SQ+3yqu0XS9/ss1Sf8zArT3/a2QB+jNt8EkTrV7I1NAv8wO+Mo/NbsAW CcJ6Dt9ZIMzZjSb6MuaW0WPrfo2VYrIGjm76AhBxmBlXO1xMDcXKxW/xOfJicJdbBYCU sVfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:content-type; bh=EQpw7PjY2UYozXBset47WKItKe/oUn4x7kYTRjRt8Zs=; b=Z1gR6dS+fm3pW99C7BxWA/1cW7VNFdCC3CabO7w3GDttU5PNAzGioSf0o91D7gd+p8 IhH0XeHAe0XkWhs7GPaW6XcKHJQI1m1H8xZU0Fcwg7iDeM1XUOL5LlGCgYlNyFjy0qSE obLJt6laabXAlqI1pS4QfdPEAlnNpeNGzXKWJDCJo7p4xVS5b4UgjQa6l+z6hnTwUUWI XU291vWwq6AFQnCZxB0ocZs3m1UZ0+ABnNargLJAShqT/QQKs0jfVwPkFxkfYj3lit16 Z/uCK5j7ykhKlTtAMI4cL+RWTQqK7uSTqdPHTBKFqN42TsGLUVYyS5IytgPJ9KsmPGds ATxg== X-Gm-Message-State: AG10YOQhA7iaHKuUbklQAEQb2SpzVQBFPPpvcpFCqy4KUR0Ogg74Lde5mPTvFiboKK4df7d8tcB57qAdKNoRMg== X-Received: by 10.182.245.138 with SMTP id xo10mr29429083obc.56.1456345246761; Wed, 24 Feb 2016 12:20:46 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Josh Wills Date: Wed, 24 Feb 2016 20:20:35 +0000 Message-ID: Subject: Re: Best Practice for Materialization To: user@crunch.apache.org Content-Type: multipart/related; boundary=001a11c1d78a1aa612052c89cdf7 --001a11c1d78a1aa612052c89cdf7 Content-Type: multipart/alternative; boundary=001a11c1d78a1aa60f052c89cdf6 --001a11c1d78a1aa60f052c89cdf6 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Turn the PCollection into a ReadableData object, which is serializable and can be passed into a DoFn and read in during initialization for use during processing. That's how the MapsideJoin stuff is implemented. On Wed, Feb 24, 2016 at 12:19 PM Micah Whitacre wrote: > How do you need the data in the DoFn? One easy way of doing this might b= e > a MapSideJoin[1] but that would probably require similar keys for what yo= u > are doing with the data and might not fit with adding supplementary data = in > the DoFn like you are intending. > > [1] - http://crunch.apache.org/user-guide.html#mapjoin > > On Wed, Feb 24, 2016 at 2:04 PM, Robinson, Landon - Landon < > landon.t.robinson@lowes.com> wrote: > >> Crunch Gurus, >> >> Say I have a small data set of key/value pairs I=E2=80=99m reading into = a >> Pcollection. I want to give that small set as a supplementary data set t= o >> DoFns for comparisons. >> I=E2=80=99ve done this before with hardcoded String arrays and such, but= wanted >> to know what best practice is for taking the contents of a very small >> Pcollection, and handing it as an object to a DoFn. >> >> I know I can turn it into a Hashmap and pass it as an argument/param, bu= t >> is there a recommended way in Crunch? Thanks! >> >> ------------------------------------------------------------------------= --- >> Landon Robinson >> Big Data & Hadoop Engineer >> IT Business Intelligence, Lowe=E2=80=99s Companies Inc. >> >> ------------------------------------------------------------------------= --- >> NOTICE: All information in and attached to the e-mails below may be >> proprietary, confidential, privileged and otherwise protected from impro= per >> or erroneous disclosure. If you are not the sender's intended recipient, >> you are not authorized to intercept, read, print, retain, copy, forward,= or >> disseminate this message. If you have erroneously received this >> communication, please notify the sender immediately by phone >> (704-758-1000) or by e-mail and destroy all copies of this message >> electronic, paper, or otherwise. >> >> *By transmitting documents via this email: Users, Customers, Suppliers >> and Vendors collectively acknowledge and agree the transmittal of >> information via email is voluntary, is offered as a convenience, and is = not >> a secured method of communication; Not to transmit any payment informati= on >> E.G. credit card, debit card, checking account, wire transfer informatio= n, >> passwords, or sensitive and personal information E.G. Driver's license, >> DOB, social security, or any other information the user wishes to remain >> confidential; To transmit only non-confidential information such as plan= s, >> pictures and drawings and to assume all risk and liability for and >> indemnify Lowe's from any claims, losses or damages that may arise from = the >> transmittal of documents or including non-confidential information in th= e >> body of an email transmittal. Thank you. * >> > > --001a11c1d78a1aa60f052c89cdf6 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Turn the PCollection into a ReadableData object, which is serializable and = can be passed into a DoFn and read in during initialization for use during = processing. That's how the MapsideJoin stuff is implemented.
On Wed, Feb 24, 2016 at 12:19 PM Micah= Whitacre <mkwhitacre@gmail.com<= /a>> wrote:

On Wed, Feb 24, 2016 a= t 2:04 PM, Robinson, Landon - Landon <landon.t.robinson@lowes.co= m> wrote:
Crunch Gurus,

Say I have a small data set of key/value pairs I=E2=80=99m reading int= o a Pcollection. I want to give that small set as a supplementary data set = to DoFns for comparisons.
I=E2=80=99ve done this before with hardcoded String arrays and such, b= ut wanted to know what best practice is for taking the contents of a very s= mall Pcollection, and handing it as an object to a DoFn.

I know I can turn it into a Hashmap and pass it as an argument/param, = but is there a recommended way in Crunch? Thanks!
----------------------------------------------------------------------= -----
Landon Robinson
Big Data & Hadoop Engineer
IT Business Intelligence, Lowe=E2=80=99s Companies Inc.=C2=A0
---------------------------------------------------------------------------=
NOTICE: All information in and attached to the e-mails below may be proprie= tary, confidential, privileged and otherwise protected from improper or err= oneous disclosure. If you are not the sender's intended recipient, you = are not authorized to intercept, read, print, retain, copy, forward, or dis= seminate this message. If you have erroneously received this communication,= please notify the sender immediately by phone (704-758-1000) or by e-mai= l and destroy all copies of this message electronic, paper, or otherwise.

By transmitting documents via this email: Users, Customers, Suppliers an= d Vendors collectively acknowledge and agree the transmittal of information= via email is voluntary, is offered as a convenience, and is not a secured = method of communication; Not to transmit any payment information E.G. credi= t card, debit card, checking account, wire transfer information, passwords,= or sensitive and personal information E.G. Driver's license, DOB, soci= al security, or any other information the user wishes to remain confidentia= l; To transmit only non-confidential information such as plans, pictures an= d drawings and to assume all risk and liability for and indemnify Lowe'= s from any claims, losses or damages that may arise from the transmittal of= documents or including non-confidential information in the body of an emai= l transmittal. Thank you.

--001a11c1d78a1aa60f052c89cdf6-- --001a11c1d78a1aa612052c89cdf7 Content-Type: image/png; name="BB375A5E-4A94-4F89-9262-3ACEEAE2DE49[4].png" Content-Disposition: inline; filename="BB375A5E-4A94-4F89-9262-3ACEEAE2DE49[4].png" Content-Transfer-Encoding: base64 Content-ID: <422276b76ea1f996_0.1> X-Attachment-Id: 422276b76ea1f996_0.1 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 gg== --001a11c1d78a1aa612052c89cdf7--