package Ġde . un ih alle . in format ik . big data . mill ions ong dataset . analysis . hadoop Ċ Ċ import Ġorg . apache . hadoop . io . Writable Comparable Ċ import Ġjava . io . Data Input Ċ import Ġjava . io . Data Output Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġgeneric Ġpair Ġof Ġtwo Ġvalues . Ċ Ġ* Ċ Ġ* ĠThere Ġis Ġno Ġmeaning Ġattached Ġto Ġvalues Ġin Ġthis Ġclass , Ġit Ġcan Ġbe Ġused Ġfor Ġany Ġpurpose . Ċ Ġ* ĠPair Ġex hib its Ġvalue Ġsemantics , Ġi . e . Ġtwo Ġpairs Ġare Ġequal Ġif Ġboth Ġcomponents Ġare Ġequal . Ċ Ġ* Ċ Ġ* Ġ@ param ĠA Ġtype Ġof Ġthe Ġfirst Ġvalue . Ċ Ġ* Ġ@ param ĠB Ġtype Ġof Ġthe Ġsecond Ġvalue . Ċ Ġ* Ġ@ property Ġfirst ĠFirst Ġvalue . Ċ Ġ* Ġ@ property Ġsecond ĠSecond Ġvalue . Ċ Ġ* Ġ@ constructor ĠCreates Ġa Ġnew Ġinstance Ġof ĠPair . Ċ Ġ*/ Ċ abstract Ġclass ĠPair Writable < A Ġ: ĠWrit able Comparable < in ĠA >, ĠB Ġ: ĠWrit able Comparable < in ĠB >> Ġinternal Ġconstructor () ĊĠĠĠ Ġ: ĠWrit able Comparable < Pair Writable < A , ĠB >> Ġ{ ĊĊĠĠĠ Ġconstructor ( first : ĠA , Ġsecond : ĠB ) Ġ: Ġthis () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . first Ġ= Ġfirst ĊĠĠĠĠĠĠĠ Ġthis . second Ġ= Ġsecond ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġfirst : ĠA ĊĠĠĠ Ġlateinit Ġvar Ġsecond : ĠB ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġread Fields ( input : ĠData Input ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfirst . read Fields ( input ) ĊĠĠĠĠĠĠĠ Ġsecond . read Fields ( input ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġwrite ( output : ĠData Output ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfirst . write ( output ) ĊĠĠĠĠĠĠĠ Ġsecond . write ( output ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠPair Writable < A , ĠB >? ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfirst . compareTo ( other ?. first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit Ġ!= Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġsecond . compareTo ( other ?. second ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġstring Ġrepresentation Ġof Ġthe Ġ[ Pair Writable ] Ġincluding Ġits Ġ[ first ] Ġand Ġ[ second ] Ġvalues . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" ($ first , Ġ$ second )" ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠPair Writable < *, Ġ* >) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( first Ġ!= Ġother . first ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( second Ġ!= Ġother . second ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfirst . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġsecond . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġcomponent 0 (): ĠA Ġ= Ġfirst ĊĊĠĠĠ Ġoperator Ġfun Ġcomponent 1 (): ĠB Ġ= Ġsecond Ċ }