十二道MR习题 - 4 - TopN问题】的更多相关文章

题目: 有一个很大的文件,这文件中的内容全部都是数字,要求尝试从这个文件中找出最大的10个数字. 分析: 看起来像是一个比较简单的问题.不用大数据框架的话,也能比较轻易的实现:就是逐个读取文件中的每个数字,放到一个大顶堆结构中:将大顶堆放满以后,每读取一个数字就将之和大顶堆中的最小值进行比较,如果其大于这个最小值的话,就将其放入堆中,并将堆中的最小值删除:这样读取到最后,堆中剩下来的内容就是top 10了. 用MapReduce实现的话也说不上困难:我们只使用Map任务读取文件,而reduce中…
题目: 需要将MR的执行结果保存到3个文件中,该怎么做. 又是一个送分题. 对于Hadoop的MapReduce来说只需要设置一下reduce任务的数量即可.MR的Job默认reduce数量是1,需要调用job的setNumReduceTasks()方法来调整reduce任务的数量. 对于spark来说,可以调用coalesce方法或repartition方法来调整分区的数量,这样也可以调整最终结果输出文件的数量.关于coalesce方法和分区的关系这里不展开了,随便搜搜就能找到了. #####…
题目 有两个文件A和B,两个文件中都有几百万行数字,现在需要找出A文件和B文件中数字集合的交集.并集.以及A对B的差集. 简单说一下思路: 这个问题关键在于key和value的设计.这里我将文件中的数字设置为key,将文件名称设置为value.这样在reduce阶段很容易就能找出A.B两个文件中数字的交并差集了. 并集就是reduce阶段能输出的全部记录:交集则需要做下过滤,即一个记录中的value需要同时有A.B两个文件的名称:差集则是文件名称集合中只包含A或B的记录. 看下用MapReduc…
题目: 一个文件,大小约为100G.文件的每一行都是一个数字,要求对文件中的所有数字进行排序. 对于这个题目,了解过Hadoop的同学可以笑而不语了.即使用spark实现也是非常简单的事情. 先说下如何用Hadoop实现.实际上也没什么好说的:Map任务逐行读入数字,而后在Reduce中输出就可以了,简单粗暴到令人发指. 看下代码好了: package com.zhyea.dev; import org.apache.hadoop.conf.Configuration; import org.a…
看完C prime plus(第五版)第十二章,随带完成了后面的习题. 1.不使用全局变量,重写程序清单12.4的程序. 先贴出12.4的程序,方便对照: /* global.c --- 使用外部变量 */ #include <stdio.h> ; //一个外部变量 void critic(void); int main(void) { extern int units; printf ("How many pounds to a firkin of butter?\n")…
之前讲了MR将结果输出到hdfs.hive.db,今天再给大家分享一下,怎样将结果输出到hbase. 首先,提一句,笔者在hadoop集群运行此MR的时候报了一个错误.是一个jar包的缘故,这个错误是hbase版本号的bug,在以下笔者会为大家介绍以及怎样解决问题. 好了,笔者将分以下几个步骤进行介绍: 一.pom依赖 <!-- hbase版本号 --> <hbase.version>0.96.1.1-cdh5.0.0</hbase.version> <!-- h…
16.8 计算平均年龄 #include <stdlib.h> #include <stdio.h> #define MAX_LEN 512 int main() { int age; int totalAge; float avgAge; int peopleNum; FILE *file; char info[MAX_LEN]; char *infoPtr; file = fopen("D:/family.txt", "r"); //按行…
15.8 十六进制倾印码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int main(int argc, char **argv) { //输入流 FILE *source; //左侧行号区域 int line = 0; //读入的个数 size_t readCount; //循环计数 int idx; //一个字节的16进制字符串 char h…
14.1 打印函数 #include <stdio.h> void print_ledger_long(){ printf("function print_ledger_long\n"); } void print_ledger_detailed(){ printf("function print_ledger_detailed\n"); } void print_ledger_default(){ printf("function print…
题目回顾: 一般解线性方程Ax=b有哪几种做法?你能在Eigen中实现吗? 解: 线性方程组Ax = b的解法 : 1.直接法:(1,2,3,4,5) 2.迭代法:如Jacobi迭代法(6) 其中只有2 3方法不要求方程组个数与变量个数相等 下面简略说明下Jacobi迭代算法:由迭代法求解线性方程组的基本思想是将联立方程组的求解归结为重复计算一组彼此独立的线性表达式,这就使问题得到了简化,类似简单迭代法转换方程组中每个方程式可得到雅可比迭代式迭代法求解方程组有一定的局限性,比如下面Jacobi函…