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

所以现在我会按小时知道每个用户发帖的数量。然后我需要发布处理这些数据以选择每个用户的最大计数,然后查看最活跃的时间。

问题

我们还有什么其他的选择来简化这个?

4

2 回答 2

1

您可以创建具有两个字段的复合键:userId、小时。然后,您可以按两个字段对键进行排序,并按 userId 对它们进行分组。对于 reducer 中的每个 userId,您必须遍历排序的小时列表,并且很容易计算具有最大帖子数量的小时。

于 2014-05-07T18:06:33.643 回答
1

我认为你已经尽可能简单了。

第一份工作为您提供每个用户每小时的帖子数

  • 输入:记录
  • 中级:k=用户+小时;v=1
  • 输出:k=用户+小时;v=计数

第二个作业发现每个用户最活跃的时间。正如@pangea 所指出的,这涉及降序二级排序。通常,每个 reducer 调用都会传递单个唯一键值的值。您可以使用分组比较器来组合单个 reducer 调用的多个键值的值。在这里,分组比较器可以“指示 hadoop”将给定用户的所有复合键值分组在一起,以便将每个用户的所有小时计数传递到对 reducer 的单个调用中。

  • 输入:k=用户+小时;v=计数
  • 中级:k=user+count;v=小时+计数
  • 输出:k=用户;v=最活跃时间

第三个作业为您计算在某个小时内(当然是按小时)最大输出的用户数。正如@pangea 所指出的,这涉及到次要排序。

  • 输入:k=用户;v=最活跃时间
  • 中级:k=小时;v=1
  • 输出:k=小时;v=number-users-this-hour-most-active-this-hour

您可以强制对作业 3 使用单个减速器,这将让您在减速器实例中保持状态并在 cleanup() 方法中排序/报告该数据 - 而不是添加第四个作业 - 但这是一种技术不缩放。在这种情况下,它可以工作,因为您最多有 24 个值要排序。

于 2014-05-07T17:14:27.347 回答