0

Hadoop に SO レコードのダンプがあります。次の質問に答える良い方法は何だろうと思っています

サンプルレコード

<row Id="4" PostTypeId="1" AcceptedAnswerId="7" CreationDate="2008-07-31T21:42:52.667" Score="251" ViewCount="15207" Body="&lt;p&gt;I want to use a track-bar to change a form's opacity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;decimal trans = trackBar1.Value / 5000;&#xA;this.Opacity = trans;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I try to build it, I get this error:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Cannot implicitly convert type 'decimal' to 'double'.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I tried making &lt;strong&gt;trans&lt;/strong&gt; to &lt;strong&gt;double&lt;/strong&gt;, but then the control doesn't work. This code has worked fine for me in VB.NET in the past. &lt;/p&gt;&#xA;" OwnerUserId="8" LastEditorUserId="2648239" LastEditorDisplayName="Rich B" LastEditDate="2014-01-03T02:42:54.963" LastActivityDate="2014-01-03T02:42:54.963" Title="When setting a form's opacity should I use a decimal or double?" Tags="&lt;c#&gt;&lt;winforms&gt;&lt;forms&gt;&lt;type-conversion&gt;&lt;opacity&gt;" AnswerCount="13" CommentCount="25" FavoriteCount="23" CommunityOwnedDate="2012-10-31T16:42:47.213" />

私の最初のカット

キー = userid_hour

これで、各ユーザーの投稿数が 1 時間ごとにわかるようになりました。次に、このデータを後処理して、ユーザーごとの最大数を選択し、最もアクティブな時間を確認する必要があります。

質問

これを簡素化するために必要な他の選択肢は何ですか?

4

2 に答える 2

1

できる限りシンプルにできたと思います。

最初のジョブは、1 時間あたりのユーザーごとの投稿数を示します

  • 入力: 記録
  • 中間: k=ユーザー+時間; v=1
  • 出力: k=ユーザー+時間; v=カウント

2 番目のジョブは、各ユーザーの最もアクティブな時間を検出します。@pangeaが指摘しているように、これには降順の二次ソートが含まれます。通常、各レデューサー呼び出しには、単一の一意のキー値の値が渡されます。グループ化コンパレータを使用して、単一のレデューサー呼び出しの複数のキー値の値を組み合わせることができます。ここで、グループ化コンパレーターは、特定のユーザーのすべての複合キー値をグループ化して、ユーザーごとの時間ごとのすべてのカウントをレデューサーへの 1 回の呼び出しに渡すように「hadoop に指示」することができます。

  • 入力: k=ユーザー+時間; v=カウント
  • 中間: k=ユーザー+カウント; v=時間+回数
  • 出力: k=ユーザー; v=最もアクティブな時間

3 番目のジョブは、特定の 1 時間 (もちろん、1 時間ごと) に最大出力に達したユーザーの数をカウントします。@pangeaが指摘しているように、これには二次ソートが含まれます。

  • 入力: k=ユーザー; v=最もアクティブな時間
  • 中級: k=時間; v=1
  • 出力: k=時間; v=number-users-most-active-this-hour

ジョブ 3 に単一のレデューサーの使用を強制することができます。これにより、4 番目のジョブを追加する代わりに、レデューサー インスタンスで状態を保持し、cleanup() メソッドでそのデータをソート/レポートできますが、それは一種の手法です。スケーリングしません。この場合、並べ替える値が最大で 24 個あるため、機能します。

于 2014-05-07T17:14:27.347 に答える