我正在尝试写一个MapReduce程序,它可以读取输入文件,但是我真的不知道如何在python中的MapReduce程序中使用它。
有人能给我一个代码片段吗?我已经尝试了下面的代码来读取python中的一个文件。我已经在读取之前将文件推到HDFS文件系统上。
f = open('/usr/total.txt',"r")
g_total = int(f.readline())
我有一个飞行数据集,我已经回答了总的飞行百分比。到目前为止,我所做的是Map器产生键值对<year,1>
,然后还原器聚合Map器的输出,以产生<year,total_count>
。
现在我很困惑如何计算它作为百分比,所以我需要总行数。
我如何在Map器和还原器中执行这些操作?
1条答案
按热度按时间erhoui1w1#
计算[...]百分比,以便我需要总行数
计算总计或平均值并不是mapreduce的一个好用例。您需要使用一个公共键将所有数据强制到一个reduce中,然后您可以对总计进行求和、计数和相除以获得百分比。例如,Map器将输出
<null,year>
,然后reduce将首先对所有年度计数进行求和(例如,使用Counter对象),然后您可以将所有年份加在一起以获得记录总数,因为所有数据现在都可用于一个reducer。一旦获得了记录总数,除以每年的计数以输出<year,yearly_count/total_count>
,给出了每年的百分比。就HDFS而言,您可以使用MrJob Python模块来执行此操作,该模块将运行Hadoop流作业。
值得指出的是,Pyspark或Hive可以轻松地完成同样的工作,因此您不“需要”编写MapReduce,但这是它们在后台的工作方式