Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Pygments / examplefiles / output / test.pig
Size: Mime:
€]q(cpygments.token
_TokenType
qXCommentqX	Multilineq†q…qq}q(Xsubtypesqcbuiltins
set
q	]q
…qRqXparentq
hh…q…qq}q(hh	]q(hhXPreprocq†q…qq}q(hh	]q…qRqh
hubhhXMultiq†q…qq}q(hh	]q …q!Rq"h
hubhhXHashbangq#†q$…q%q&}q'(hh	]q(…q)Rq*h
hubhhXSingleq+†q,…q-q.}q/(hh	]q0…q1Rq2h
hubhhX
SingleLineq3†q4…q5q6}q7(hh	]q8…q9Rq:h
hubhhXDocq;†q<…q=q>}q?(hh	]q@…qARqBh
hubhhX	DirectiveqC†qD…qEqF}qG(hh	]qH…qIRqJh
hubhhhX
SinglelineqK†qL…qMqN}qO(hh	]qP…qQRqRh
hubhhXPreprocFileqS†qT…qUqV}qW(hh	]qX…qYRqZh
hubhhXSpecialq[†q\…q]q^}q_(hh	]q`…qaRqbh
hube…qcRqdh
h)…qeqf}qg(hh	]qh(hXEscapeqi…qj…qkql}qm(hh	]qn…qoRqph
hfubhXOperatorqq…qr…qsqt}qu(hh	]qv(hhqXDBSqw†qx…qyqz}q{(hh	]q|…q}Rq~h
htubhhqXWordq†q€…qq‚}qƒ(hh	]q„…q…Rq†h
htube…q‡Rqˆh
hfhh‚hwhzubhXNameq‰…qŠ…q‹qŒ}q(hh	]qŽ(hh‰XTagq†q…q‘q’}q“(hh	]q”…q•Rq–h
hŒubhh‰XEntityq—†q˜…q™qš}q›(hh	]qœhh‰h—hw‡q…qžqŸ}q (hh	]q¡…q¢Rq£h
hšuba…q¤Rq¥h
hŒhwhŸubhh‰X	Exceptionq¦†q§…q¨q©}qª(hh	]q«…q¬Rq­h
hŒubhh‰X	Decoratorq®†q¯…q°q±}q²(hh	]q³…q´Rqµh
hŒubhh‰XClassq¶†q·…q¸q¹}qº(hh	]q»(hh‰h¶hw‡q¼…q½q¾}q¿(hh	]qqÁRqÂh
h¹ubhh‰h¶XStartqÇqąqŁqÆ}qÇ(hh	]qȅqÉRqÊh
h¹ube…qËRqÌh
hŒhÃhÆhwh¾ubhh‰XVariableq͆q΅qρqÐ}qÑ(hh	]qÒ(hh‰hÍX	AnonymousqӇqԅqՁqÖ}q×(hh	]q؅qÙRqÚh
hÐubhh‰hÍh¶‡qۅq܁qÝ}qÞ(hh	]q߅qàRqáh
hÐubhh‰hÍXMagicqâ‡qã…qäqå}qæ(hh	]qç…qèRqéh
hÐubhh‰hÍXGlobalqê‡që…qìqí}qî(hh	]qï…qðRqñh
hÐubhh‰hÍXInstanceqò‡qó…qôqõ}qö(hh	]q÷…qøRqùh
hÐube…qúRqûh
hŒh¶hÝhêhíhòhõhâhåhÓhÖubhh‰X	Attributeqü†qý…qþqÿ}r(hh	]rhh‰hüh͇r…rr}r(hh	]r…rRrh
hÿuba…r	Rr
h
hŒhÍjubhh‰X	Namespacer†r…r
r}r(hh	]r…rRrh
hŒubhh‰XPropertyr†r…rr}r(hh	]r…rRrh
hŒubhh‰XSymbolr†r…rr}r(hh	]r …r!Rr"h
hŒubhh‰XClassesr#†r$…r%r&}r'(hh	]r(…r)Rr*h
hŒubhh‰XPseudor+†r,…r-r.}r/(hh	]r0…r1Rr2h
hŒubhh‰XLabelr3†r4…r5r6}r7(hh	]r8…r9Rr:h
hŒubhh‰hq†r;…r<r=}r>(hh	]r?…r@RrAh
hŒubhh‰XBuiltinrB†rC…rDrE}rF(hh	]rG(hh‰jBj+‡rH…rIrJ}rK(hh	]rL…rMRrNh
jEubhh‰jBXTyperO‡rP…rQrR}rS(hh	]rT…rURrVh
jEube…rWRrXh
hŒj+jJjOjRubhh‰XFieldrY†rZ…r[r\}r](hh	]r^…r_Rr`h
hŒubhh‰XOtherra†rb…rcrd}re(hh	]rfhh‰jaXMemberrg‡rh…rirj}rk(hh	]rl…rmRrnh
jduba…roRrph
hŒjgjjubhh‰XFunctionrq†rr…rsrt}ru(hh	]rvhh‰jqhâ‡rw…rxry}rz(hh	]r{…r|Rr}h
jtuba…r~Rrh
hŒhâjyubhh‰jO†r€…rr‚}rƒ(hh	]r„…r…Rr†h
hŒubhh‰XConstantr‡†rˆ…r‰rŠ}r‹(hh	]rŒ…rRrŽh
hŒube…rRrh
hfhühÿjBjEh¶h¹j‡jŠh®h±h—hšh¦h©jqjtjjj3j6jjjajdhh’hÍhÐjYj\jjj+j.hqj=j#j&jOj‚ubhXLiteralr‘…r’…r“r”}r•(hh	]r–(hj‘ja†r—…r˜r™}rš(hh	]r›…rœRrh
j”ubhj‘XCharrž†rŸ…r r¡}r¢(hh	]r£…r¤Rr¥h
j”ubhj‘XDater¦†r§…r¨r©}rª(hh	]r«…r¬Rr­h
j”ubhj‘XScalarr®†r¯…r°r±}r²(hh	]r³hj‘j®XPlainr´‡rµ…r¶r·}r¸(hh	]r¹…rºRr»h
j±uba…r¼Rr½h
j”j´j·ubhj‘XStringr¾†r¿…rÀrÁ}rÂ(hh	]rÃ(hj‘j¾XInterpolrćrÅ…rƁrÇ}rÈ(hh	]rÉ…rÊRrËh
jÁubhj‘j¾X	DelimeterṙrÍ…r΁rÏ}rÐ(hh	]rÑ…rÒRrÓh
jÁubhj‘j¾jž‡rÔ…rՁrÖ}r×(hh	]rØ…rÙRrÚh
jÁubhj‘j¾j‡rÛ…r܁rÝ}rÞ(hh	]rß…ràRráh
jÁubhj‘j¾h+‡râ…rãrä}rå(hh	]ræ…rçRrèh
jÁubhj‘j¾ja‡ré…rêrë}rì(hh	]rí…rîRrïh
jÁubhj‘j¾XBacktickrð‡rñ…ròró}rô(hh	]rõ…röRr÷h
jÁubhj‘j¾hi‡rø…rùrú}rû(hh	]rü…rýRrþh
jÁubhj‘j¾XRegexrÿ‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾XMomentr‡r…r	r
}r(hh	]r…r
Rrh
jÁubhj‘j¾XBooleanr‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾X	Characterr‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾X	Delimiterr‡r …r!r"}r#(hh	]r$…r%Rr&h
jÁubhj‘j¾h;‡r'…r(r)}r*(hh	]r+…r,Rr-h
jÁubhj‘j¾h‰‡r.…r/r0}r1(hh	]r2…r3Rr4h
jÁubhj‘j¾XAffixr5‡r6…r7r8}r9(hh	]r:…r;Rr<h
jÁubhj‘j¾XHeredocr=‡r>…r?r@}rA(hh	]rB…rCRrDh
jÁubhj‘j¾XDoublerE‡rF…rGrH}rI(hh	]rJ…rKRrLh
jÁubhj‘j¾XInterprM‡rN…rOrP}rQ(hh	]rR…rSRrTh
jÁubhj‘j¾XAtomrU‡rV…rWrX}rY(hh	]rZ…r[Rr\h
jÁube…r]Rr^h
j”j5j8jðjójžjÖjj"h;j)jEjHhijúj=j@jÄjÇjajëjÿjh+jäjjÝjjjj
jMjPjjjÌjÏjUjXh‰j0ubhj‘XNumberr_†r`…rarb}rc(hh	]rd(hj‘j_XFloatre‡rf…rgrh}ri(hh	]rj…rkRrlh
jbubhj‘j_XDecrm‡rn…rorp}rq(hh	]rr…rsRrth
jbubhj‘j_XRadixru‡rv…rwrx}ry(hh	]rz…r{Rr|h
jbubhj‘j_XOctr}‡r~…rr€}r(hh	]r‚…rƒRr„h
jbubhj‘j_XBinr…‡r†…r‡rˆ}r‰(hh	]rŠ…r‹RrŒh
jbubhj‘j_hü‡r…rށr}r(hh	]r‘…r’Rr“h
jbubhj‘j_XHexr”‡r•…r–r—}r˜(hh	]r™…ršRr›h
jbubhj‘j_XIntegerrœ‡r…ržrŸ}r (hh	]r¡h(j‘j_jœXLongr¢tr£…r¤r¥}r¦(hh	]r§…r¨Rr©h
jŸuba…rªRr«h
jbj¢j¥ubhj‘j_XDecimalr¬‡r­…r®r¯}r°(hh	]r±…r²Rr³h
jbube…r´Rrµh
j”j…jˆjejhj”j—jœjŸj}j€jujxhüjj¬j¯jmjpube…r¶Rr·h
hfj¾jÁj_jbj¦j©j®j±jaj™jžj¡ubhXGenericr¸…r¹…rºr»}r¼(hh	]r½(hj¸XErrorr¾†r¿…rÀrÁ}rÂ(hh	]rÃ…rÄRrÅh
j»ubhj¸X
SubheadingrƆrÇ…rȁrÉ}rÊ(hh	]rË…rÌRrÍh
j»ubhj¸X	TracebackrΆrÏ…rЁrÑ}rÒ(hh	]rÓ…rÔRrÕh
j»ubhj¸XOutputrÖ†r×…r؁rÙ}rÚ(hh	]rÛ…rÜRrÝh
j»ubhj¸XPromptrÞ†rß…ràrá}râ(hh	]rã…räRråh
j»ubhj¸XDeletedræ†rç…rèré}rê(hh	]rë…rìRríh
j»ubhj¸XInsertedrî†rï…rðrñ}rò(hh	]ró…rôRrõh
j»ubhj¸XHeadingrö†r÷…rørù}rú(hh	]rû…rüRrýh
j»ubhj¸XStrongrþ†rÿ…rr}r(hh	]r…rRrh
j»ubhj¸XEmphr†r…rr	}r
(hh	]r…rRr
h
j»ube…rRrh
hfjæjéjj	j¾jÁjöjùjîjñjÖjÙjÞjájþjjÆjÉjÎjÑubhj¾…r…rr}r(hh	]r…rRrh
hfubhXKeywordr…r…rr}r(hh	]r(hjh†r…rr}r (hh	]r!…r"Rr#h
jubhjj†r$…r%r&}r'(hh	]r(…r)Rr*h
jubhjjO†r+…r,r-}r.(hh	]r/…r0Rr1h
jubhjXPreProcr2†r3…r4r5}r6(hh	]r7…r8Rr9h
jubhjXControlr:†r;…r<r=}r>(hh	]r?…r@RrAh
jubhjj‡†rB…rCrD}rE(hh	]rF…rGRrHh
jubhjj†rI…rJrK}rL(hh	]rM…rNRrOh
jubhjj+†rP…rQrR}rS(hh	]rT…rURrVh
jubhjXDeclarationrW†rX…rYrZ}r[(hh	]r\…r]Rr^h
jubhjXReservedr_†r`…rarb}rc(hh	]rd…reRrfh
jube…rgRrhh
hfj‡jDjWjZjjKj+jRj_jbjOj-j:j=jj&j2j5hjubhja…ri…rjrk}rl(hh	]rm…rnRroh
hfubhXTextrp…rq…rrrs}rt(hh	]ru(hjpXRootrv†rw…rxry}rz(hh	]r{…r|Rr}h
jsubhjpj†r~…rr€}r(hh	]r‚…rƒRr„h
jsubhjpXRagr…†r†…r‡rˆ}r‰(hh	]rŠ…r‹RrŒh
jsubhjpX
Whitespacer†rŽ…rr}r‘(hh	]r’…r“Rr”h
jsubhjpXBeerr•†r–…r—r˜}r™(hh	]rš…r›Rrœh
jsubhjpXPunctuationr†rž…rŸr }r¡(hh	]r¢…r£Rr¤h
jsube…r¥Rr¦h
hfjjjj€jj jvjyj•j˜j…jˆubhhj…r§…r¨r©}rª(hh	]r«hjX	Indicatorr¬†r­…r®r¯}r°(hh	]r±…r²Rr³h
j©uba…r´Rrµh
hfj¬j¯ube…r¶Rr·jpjshihlj¾jjajkjjh‰hŒj‘j”jj©hqhthhj¸j»XTokenr¸hfj¾jÁj_jbubh#h&hhhhhShVh+h.h[h^hChFh3h6h;h>hhhKhNububX/**
 *  This script is an example recommender (using made up data) showing how you might modify item-item links
 *  by defining similar relations between items in a dataset and customizing the change in weighting.
 *  This example creates metadata by using the genre field as the metadata_field.  The items with
 *  the same genre have it's weight cut in half in order to boost the signals of movies that do not have the same genre.
 *  This technique requires a customization of the standard GetItemItemRecommendations macro
 */r¹†rºjsX
r»†r¼jXimportr½†r¾jsX r¿†rÀjÁX'recommenders.pig'rÁ†rÂj©X;rÆrÄjsX



rņrÆjX%defaultrdžrÈjsj¿†rÉjsXINPUT_PATH_PURCHASESrʆrËjsj¿†rÌjÁX'../data/retail/purchases.json'r͆rÎjsj»†rÏjX%defaultrІrÑjsj¿†rÒjsXINPUT_PATH_WISHLISTrÓ†rÔjsj¿†rÕjÁX'../data/retail/wishlists.json'rÖ†r×jsj»†rØjX%defaultrÙ†rÚjsj¿†rÛjsXINPUT_PATH_INVENTORYr܆rÝjsj¿†rÞjÁX'../data/retail/inventory.json'r߆ràjsj»†rájX%defaultrâ†rãjsj¿†räjsXOUTPUT_PATHrå†ræjsj¿†rçjÁX%'../data/retail/out/modify_item_item'rè†réjsX


rê†rëhX6/******** Custom GetItemItemRecommnedations *********/rì†ríjsj»†rîjXdefinerï†rðjsj¿†rñjtX/recsys__GetItemItemRecommendations_ModifyCustomrò†rój©X(rô†rõjsXuser_item_signals,rö†r÷jsj¿†røjsXmetadatarù†rúj©X)rû†rüjsj¿†rýjXreturnsrþ†rÿjsj¿†rjsXitem_item_recsr†rjsj¿†rj©X{r†rjsX

    r†rhX2-- Convert user_item_signals to an item_item_graphr†r	jsX
    r
†rjsX
ii_links_raw,r†r
jsj¿†rjsXitem_weightsr†rjsX   r†rhtX=r†rjsX   r†rjtXrecsys__BuildItemItemGraphr†rj©jô†rjsX(
                                       r†rjsX$user_item_signals,r†rjsX(
                                       r†rjsX$LOGISTIC_PARAM,r †r!jsX(
                                       r"†r#jsX$MIN_LINK_WEIGHT,r$†r%jsX(
                                       r&†r'jsX$MAX_LINKS_PER_USERr(†r)jsX&
                                     r*†r+j©jû†r,j©jÆr-jsX
    r.†r/hXP-- NOTE this function is added in order to combine metadata with item-item linksr0†r1jsX	
        r2†r3hX*-- See macro for more detailed explinationr4†r5jsX
    r6†r7jsXii_links_metadatar8†r9jsX           r:†r;htj†r<jsX   r=†r>jtX"recsys__AddMetadataToItemItemLinksr?†r@j©jô†rAjsX)
                                        rB†rCjsX
ii_links_raw,rD†rEjsX)
                                        rF†rGjsX	$metadatarH†rIjsX%
                                    rJ†rKj©jû†rLj©jÆrMjsX

    rN†rOhX,/********* Custom Code starts here ********/rP†rQjsX

    rR†rShXb--The code here should adjust the weights based on an item-item link and the equality of metadata.rT†rUjsX
    rV†rWhXi-- In this case, if the metadata is the same, the weight is reduced.  Otherwise the weight is left alone.rX†rYjsX
    rZ†r[jsXii_links_adjustedr\†r]jsX           r^†r_htj†r`jsX  ra†rbjXforeachrc†rdjsj¿†rejsXii_links_metadatarf†rgjsj¿†rhjXgenerateri†rjjsj¿†rkjsXitem_A,rl†rmjsj¿†rnjsXitem_B,ro†rpjsX)
                                        rq†rrhXX-- the amount of weight adjusted is dependant on the domain of data and what is expectedrs†rtjsX)
                                        ru†rvhXl-- It is always best to adjust the weight by multiplying it by a factor rather than addition with a constantrw†rxjsX)
                                        ry†rzj©jô†r{jsX
metadata_Br|†r}jsj¿†r~htj†rhtj†r€jsj¿†rjsX
metadata_Ar‚†rƒjsj¿†r„htX?r…†r†jsj¿†r‡j©jô†rˆjsXweightr‰†rŠjsj¿†r‹jsX*rŒ†rjsj¿†rŽjhX0.5r†rj©jû†r‘jsX:r’†r“jsj¿†r”jsXweightr•†r–j©jû†r—jsj¿†r˜jXasr™†ršjsj¿†r›jsXweight;rœ†rjsX


    rž†rŸhX+/******** Custom Code stops here *********/r †r¡jsX

    r¢†r£hX&-- remove negative numbers just incaser¤†r¥jsX
    r¦†r§jsXii_links_adjusted_filtr¨†r©jsj¿†rªhtj†r«jsj¿†r¬jXforeachr­†r®jsj¿†r¯jsXii_links_adjustedr°†r±jsj¿†r²jXgenerater³†r´jsj¿†rµjsXitem_A,r¶†r·jsj¿†r¸jsXitem_B,r¹†rºjsX'
                                      r»†r¼j©jô†r½jsXweightr¾†r¿jsj¿†rÀhtX<=rÁ†rÂjsj¿†rÃjŸX0rĆrÅjsj¿†rÆhtj…†rÇjsj¿†rÈjŸjĆrÉjsj’†rÊjsj¿†rËjsXweightr̆rÍj©jû†rÎjsj¿†rÏjXasrІrÑjsj¿†rÒjsXweight;rÓ†rÔjsX
    rÕ†rÖhX>-- Adjust the weights of the graph to improve recommendations.r׆rØjsX
    rÙ†rÚjsXii_linksrÛ†rÜjsX                    r݆rÞhtj†rßjsX   rà†rájtX!recsys__AdjustItemItemGraphWeightrâ†rãj©jô†räjsX)
                                        rå†ræjsXii_links_adjusted_filt,rç†rèjsX)
                                        ré†rêjsX
item_weights,rë†rìjsX)
                                        rí†rîjsX$BAYESIAN_PRIORrï†rðjsX%
                                    rñ†ròj©jû†rój©jÆrôjsX

    rõ†röhX?-- Use the item-item graph to create item-item recommendations.r÷†røjsX
    rù†rújsX$item_item_recsrû†rüjsj¿†rýhtj†rþjsX  rÿ†rjtX-recsys__BuildItemItemRecommendationsFromGraphr†rj©jô†rjsX
                           r†rjsX	ii_links,r†rjsX
                           r†r	jsX$NUM_RECS_PER_ITEM,r
†rjsX
                           r†r
jsX$NUM_RECS_PER_ITEMr†rjsX
                       r†rj©jû†rj©jÆrjsj»†rj©X}r†rj©jÆrjsX


r†rhX/******* Load Data **********/r†rjsX

r†rhX--Get purchase signalsr†rjsj»†r jsXpurchase_inputr!†r"jsj¿†r#htj†r$jsj¿†r%jXloadr&†r'jsj¿†r(jÁX'$INPUT_PATH_PURCHASES'r)†r*jsj¿†r+jXusingr,†r-jsj¿†r.jsX+org.apache.pig.piggybank.storage.JsonLoaderr/†r0j©jô†r1jsX
                    r2†r3jsX	'row_id: r4†r5j-Xintr6†r7htX,r8†r9jsX
                     r:†r;jsXmovie_idr<†r=jsj’†r>jsj¿†r?j-X	chararrayr@†rAhtj8†rBjsX
                     rC†rDjsX
movie_namerE†rFjsj’†rGjsj¿†rHj-X	chararrayrI†rJhtj8†rKjsX
                     rL†rMjsXuser_idrN†rOjsj’†rPjsj¿†rQj-X	chararrayrR†rShtj8†rTjsX
                     rU†rVjsXpurchase_pricerW†rXjsj’†rYjsj¿†rZj-Xintr[†r\jsX');

r]†r^hX--Get wishlist signalsr_†r`jsj»†rajsXwishlist_inputrb†rcjsj¿†rdhtj†rejsX  rf†rgjXloadrh†rijsj¿†rjjÁX'$INPUT_PATH_WISHLIST'rk†rljsj¿†rmjXusingrn†rojsj¿†rpjsX+org.apache.pig.piggybank.storage.JsonLoaderrq†rrj©jô†rsjsX
                     rt†rujsX	'row_id: rv†rwj-Xintrx†ryhtj8†rzjsX
                      r{†r|jsXmovie_idr}†r~jsj’†rjsj¿†r€j-X	chararrayr†r‚htj8†rƒjsX
                      r„†r…jsX
movie_namer††r‡jsj’†rˆjsj¿†r‰j-X	chararrayrІr‹htj8†rŒjsX
                      r†rŽjsXuser_idr†rjsj’†r‘jsj¿†r’j-X	chararrayr“†r”jsX');


r•†r–hX,/******* Convert Data to Signals **********/r—†r˜jsX

r™†ršhX4-- Start with choosing 1 as max weight for a signal.r›†rœjsj»†rjsXpurchase_signalsrž†rŸjsj¿†r htj†r¡jsj¿†r¢jXforeachr£†r¤jsj¿†r¥jsXpurchase_inputr¦†r§jsj¿†r¨jXgenerater©†rªjsX
                        r«†r¬jsXuser_idr­†r®jsX    r¯†r°jXasr±†r²jsj¿†r³jsXuser,r´†rµjsX
                        r¶†r·jsX
movie_namer¸†r¹jsj¿†rºjXasr»†r¼jsj¿†r½jsXitem,r¾†r¿jsX
                        rÀ†rÁjhX1.0r†rÃjsX        rĆrÅjXasrƆrÇjsj¿†rÈjsXweight;rɆrÊjsX


rˆrÌhX\-- Start with choosing 0.5 as weight for wishlist items because that is a weaker signal thanr͆rÎjsj»†rÏhX-- purchasing an item.rІrÑjsj»†rÒjsXwishlist_signalsrÓ†rÔjsj¿†rÕhtj†rÖjsj¿†r×jXforeachr؆rÙjsj¿†rÚjsXwishlist_inputrÛ†rÜjsj¿†rÝjXgeneraterÞ†rßjsX
                        rà†rájsXuser_idrâ†rãjsX    rä†råjXasræ†rçjsj¿†rèjsXuser,ré†rêjsX
                        rë†rìjsX
movie_namerí†rîjsj¿†rïjXasrð†rñjsj¿†ròjsXitem,ró†rôjsX
                        rõ†röjhX0.5r÷†røjsX        rù†rújXasrû†rüjsj¿†rýjsXweight;rþ†rÿjsX

r†rjsXuser_signalsr†rjsj¿†rhtj†rjsj¿†rjXunionr†rjsj¿†r	jsXpurchase_signals,r
†rjsj¿†rjsXwishlist_signals;r
†rjsX


r†rhX7/******** Changes for Modifying item-item links ******/r†rjsj»†rjsXinventory_inputr†rjsj¿†rhtj†rjsj¿†rjXloadr†rjsj¿†rjÁX'$INPUT_PATH_INVENTORY'r†rjsj¿†rjXusingr†r jsj¿†r!jsX+org.apache.pig.piggybank.storage.JsonLoaderr"†r#j©jô†r$jsX
                     r%†r&jsX'movie_title: r'†r(j-X	chararrayr)†r*htj8†r+jsX
                      r,†r-jsXgenresr.†r/jsj’†r0jsj¿†r1jXbagr2†r3j©j†r4j-Xtupler5†r6j©jô†r7jsXcontentr8†r9jsj’†r:j-X	chararrayr;†r<j©jû†r=j©j†r>jsX');


r?†r@jsXmetadatarA†rBjsj¿†rChtj†rDjsj¿†rEjXforeachrF†rGjsj¿†rHjsXinventory_inputrI†rJjsj¿†rKjXgeneraterL†rMjsX
              rN†rOjXFLATTENrP†rQj©jô†rRjsXgenresrS†rTj©jû†rUjsj¿†rVjXasrW†rXjsj¿†rYjsXmetadata_field,rZ†r[jsX
              r\†r]jsXmovie_titler^†r_jsj¿†r`jXasra†rbjsj¿†rcjsXitem;rd†rejsj»†rfhX.-- requires the macro to be written seperatelyrg†rhjsX
  ri†rjhX9--NOTE this macro is defined within this file for clarityrk†rljsj»†rmjsXitem_item_recsrn†rojsj¿†rphtj†rqjsj¿†rrjtX/recsys__GetItemItemRecommendations_ModifyCustomrs†rtj©jô†rujsX
user_signals,rv†rwjsj¿†rxjsXmetadatary†rzj©jû†r{j©jÆr|jsj»†r}hX"/******* No more changes ********/r~†rjsX


r€†rjsXuser_item_recsr‚†rƒjsj¿†r„htj†r…jsj¿†r†jtX"recsys__GetUserItemRecommendationsr‡†rˆj©jô†r‰jsX
user_signals,rІr‹jsj¿†rŒjsXitem_item_recsr†rŽj©jû†rj©jÆrjsX

r‘†r’hX/--Completely unrelated code stuck in the middler“†r”jsj»†r•jsXdatar–†r—jsX        r˜†r™htj†ršjsX    r›†rœjXLOADr†ržjsj¿†rŸjÁX&'s3n://my-s3-bucket/path/to/responses'r †r¡jsX
                 r¢†r£jXUSINGr¤†r¥jsj¿†r¦jsX+org.apache.pig.piggybank.storage.JsonLoaderr§†r¨j©jô†r©j©jû†rªj©jÆr«jsj»†r¬jsX	responsesr­†r®jsX   r¯†r°htj†r±jsX    r²†r³jXFOREACHr´†rµjsj¿†r¶jsXdatar·†r¸jsj¿†r¹jXGENERATErº†r»jsj¿†r¼jsXobjectr½†r¾htX#r¿†rÀjÁX
'response'rÁ†rÂjsj¿†rÃjXASrĆrÅjsj¿†rÆjsXresponserdžrÈjsj’†rÉjsj¿†rÊjXmaprˆrÌj©X[r͆rÎj©X]rφrÐj©jÆrÑjsj»†rÒjsXoutrÓ†rÔjsX	         rÕ†rÖhtj†r×jsX    r؆rÙjXFOREACHrÚ†rÛjsj¿†rÜjsX	responsesr݆rÞjsX
                 r߆ràjXGENERATErá†râjsj¿†rãjsXresponserä†råhtj¿†ræjÁX'id'rç†rèjsj¿†réjXASrê†rëjsj¿†rìjsXidrí†rîjsj’†rïjsj¿†rðj-Xintrñ†ròhtj8†rójsj¿†rôjsXresponserõ†röhtj¿†r÷jÁX'thread'rø†rùjsj¿†rújXASrû†rüjsj¿†rýjsXthreadrþ†rÿjsj’†rjsj¿†rj-X	chararrayr†rhtj8†rjsX
                          r†rjsXresponser†rhtj¿†r	jÁX
'comments'r
†rjsj¿†rjXASr
†rjsj¿†rjsXcommentsr†rjsj’†rjsj¿†rj©j†rjsXtr†rjsj’†rjsj¿†rj©jô†rjsXcommentr†rjsj’†rjsj¿†rj-X	chararrayr†rj©jû†r j©j†r!j©jÆr"jsj»†r#jXSTOREr$†r%jsj¿†r&jsXoutr'†r(jsj¿†r)jXINTOr*†r+jsj¿†r,jÁX's3n://path/to/output'r-†r.jsj¿†r/jXUSINGr0†r1jsj¿†r2jEX
PigStorager3†r4j©jô†r5jÁX'|'r6†r7j©jû†r8j©jÆr9jsX


r:†r;hX*/******* Store recommendations **********/r<†r=jsX

r>†r?hXQ--  If your output folder exists already, hadoop will refuse to write data to it.r@†rAjsX

rB†rCjXrmfrD†rEjsj¿†rFjsX$OUTPUT_PATH/item_item_recs;rG†rHjsj»†rIjXrmfrJ†rKjsj¿†rLjsX$OUTPUT_PATH/user_item_recs;rM†rNjsX

rO†rPjXstorerQ†rRjsj¿†rSjsXitem_item_recsrT†rUjsj¿†rVjXintorW†rXjsj¿†rYjÁX'$OUTPUT_PATH/item_item_recs'rZ†r[jsj¿†r\jXusingr]†r^jsj¿†r_jEX
PigStorager`†raj©jô†rbj©jû†rcj©jÆrdjsj»†rejXstorerf†rgjsj¿†rhjsXuser_item_recsri†rjjsj¿†rkjXintorl†rmjsj¿†rnjÁX'$OUTPUT_PATH/user_item_recs'ro†rpjsj¿†rqjXusingrr†rsjsj¿†rtjEX
PigStorageru†rvj©jô†rwj©jû†rxj©jÆryjsX

rz†r{hX'-- STORE the item_item_recs into dynamor|†r}jsj»†r~jXSTOREr†r€jsj¿†rjsXitem_item_recsr‚†rƒjsX
 r„†r…jXINTOr††r‡jsj¿†rˆjÁX#'$OUTPUT_PATH/unused-ii-table-data'r‰†rŠjsj»†r‹jXUSINGrŒ†rjsj¿†rŽjsX*com.mortardata.pig.storage.DynamoDBStorager†rj©jô†r‘jÁX'$II_TABLE'r’†r“htj8†r”jsj¿†r•jÁX'$AWS_ACCESS_KEY_ID'r–†r—htj8†r˜jsj¿†r™jÁX'$AWS_SECRET_ACCESS_KEY'rš†r›j©jû†rœj©jÆrjsX

rž†rŸhX'-- STORE the user_item_recs into dynamor †r¡jsj»†r¢jXSTOREr£†r¤jsj¿†r¥jsXuser_item_recsr¦†r§jsX
 r¨†r©jXINTOrª†r«jsj¿†r¬jÁX#'$OUTPUT_PATH/unused-ui-table-data'r­†r®jsj»†r¯jXUSINGr°†r±jsj¿†r²jsX*com.mortardata.pig.storage.DynamoDBStorager³†r´j©jô†rµjÁX'$UI_TABLE'r¶†r·htj8†r¸jsj¿†r¹jÁX'$AWS_ACCESS_KEY_ID'rº†r»htj8†r¼jsj¿†r½jÁX'$AWS_SECRET_ACCESS_KEY'r¾†r¿j©jû†rÀj©jÆrÁjsj»†rÂe.