mapreduce-对于每个学生,学生发布最多帖子的时间是什么时候

t1rydlwq  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(229)

我有一大堆关于hadoop的记录。我想知道什么是回答以下问题的好方法
样品记录

<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" />

我的第一个伤口
key=userid\u小时
所以现在我知道了每个用户每小时发帖的数量。然后我需要对这些数据进行后期处理,以选择每个用户的最大计数,然后查看最活跃的小时数。
问题
我们还有什么办法来简化这个问题?

8e2ybdfx

8e2ybdfx1#

我想你已经尽可能简单了。
第一个作业提供每个用户每小时的帖子数
输入:记录
中级:k=用户+小时;v=1
输出:k=用户+小时;v=计数
第二个作业发现每个用户最活跃的时间。正如@pangea所指出的,这涉及到降序的二级排序。通常每个reducer调用都会传递一个唯一键值的值。可以使用分组比较器为单个reducer调用组合多个键值的值。在这里,分组比较器可以“指示hadoop”将给定用户的所有组合键值分组在一起,以便将每个用户的每小时计数传递到对reducer的单个调用中。
输入:k=用户+小时;v=计数
中间:k=用户+计数;v=小时+计数
输出:k=用户;v=最活跃小时
第三个作业提供了在某个小时内(当然是按小时)最大输出下降的用户数。正如@pangea所指出的,这涉及到第二种排序。
输入:k=用户;v=最活跃小时
中间:k=小时;v=1
输出:k=小时;v=本小时最活跃的用户数
您可以对作业3强制使用一个reducer,这样就可以在reducer示例中保留状态,并在cleanup()方法中对数据进行排序/报告,而不是添加第四个作业,但这种技术无法扩展。在本例中,它是有效的,因为您最多有24个值要排序。

sg2wtvxw

sg2wtvxw2#

您可以使用两个字段创建复合键:userid、hour。然后可以按这两个字段对键进行排序,并按userid对它们进行分组。对于reducer中的每个userid,您将不得不遍历排序后的小时列表,并且它很容易计算出最大发布量的小时数。

相关问题