( 只是用MapReduce举例,只要是数据处理任何工具都可以从这三点去学习 ) 用 MapReduce 做数据分析处理或统计等 这类和数据进行交互处理的编程计算可简单归纳出几个要点:
1.弄清要处理的数据进行程序的结构
首先第一个要弄清楚的就是你的程序读取进来的数据是什么样子的,是什么结构的,如果数据是什么样子的都弄不清楚,数据是什么结构也不清楚,那么数据处理员怎么去处理数据呢?你的程序编写头都开不起,我们平常的简单比如说Python的 数据处理,我们用pandas的read方法去读取数据,这个比较常用基本大数据人人都会的所以都知道 是 DataFrame,但是如果是比较罕见的框架呢?比如 MapReduce 呢?MapReduce在 网上大部分的教学都是直接给你讲他底层组件怎么怎么的噼里啪啦的,然后直接大致给你讲了底层分割数据的逻辑原理然后直接就是开始编程做数据处理,那么就会出现一个让人很懵逼的情况,这个数据读进行啥样?啥结构?大部分教学没给你确切的说明,那么这个时候第一要事要做的事情就是一定要搞明白他MapReduce程序后在哪一步长什么样子,是什么结构?是字符串呢?还是 DataFrame 或者 键值对呢?在进入 Map阶段时,它虽然几条数据组成的数据段,但是真实留进来的是一行一行的数据,结构是键值对结构,这个时候的key是进来的那个预处理组件自动给每行分配的序号一般情况用不上,要处理·的数据在value上,对Value提取数据(提取后的是字符串结构)。
下面这段是唠嗑,可以不看
有的教学直接给你丢个说这个 Map 阶段的数据啊进来后啊就是这样 “ abc
bca
cab",这个时候呢学员就有点无语了,讲组件的时候就说过了 会给每个机子分一部分数据,我就知道了是一部分数据啊,我问的是他进来我处理的是啥数据啊,这个时候呢讲的人可能就是支支吾吾不愿意讲的样子了,因为其实这些真实的东西不难,难的是讲者的故意误导,不知其目的,因为给学员讲知识的时候故意误导人让人学起来变得更困难,现实中其实我们经常能遇到这种事情,我初中的时候就被那个数学老师摆过一道,我那时候单纯还不知道世界上何为心机,他上课时经常故意不怎么讲,就和我们自学程序的时候遇到一些莫名其妙的教学者和莫名其妙的文章一样,我经常在课堂上发现那个数学老师讲课本知识的时候讲一半后就开始让我们自习,然后说那些东西没必要讲自己下课后去学弄清楚,结果真实的是每次考试发现他基本上要考的知识点都没有讲过,而且他讲的那些知识点经常都是 1+1 轻而易举就能学会的东西,根本不需要讲的他讲了,难的需要讲的他不讲,像不像铁子们学程序时候遇到的无语时刻,后来才无意间他透露了他在周末有那种补习课卖,班上那几个考的好的都买了的一节课100元,铁子们有没有在自学编程看教学的熟悉感,然后我就对那个老师经常和他唱反调,终于有一天他忍不住了动手打了我,闹班主任那边去了,他先过去的,我过去后莫名其妙被千夫所指,我就上课说话唱反调,过去后我莫名其妙多了个打老师的罪名,我不知道怎么回事,我就咬定了我没动人打过老师,那个数学老师就一口咬定了我动手打他了,就班主任和语文老师关心问我有没有事需不需要去医院看看,我那个时候还没有往那个方向想,后来快中考的时候被好朋友好兄弟在寝室围堵威胁我放弃中考补分名额的时候我才明白这个原来到处都是算计,那个数学老师咬定污蔑我打他了的原因也是想如果报警尽量定义为互殴这样就不用赔钱了
2.数据处理时这种结构的数据根据要求可以怎么处理
在知道 Map 阶段进入数据为 字符串时处理方向就明确了,就使用平常的数据处理操作对这个字符串进行处理,然后知道进来的每行数据进来是什么样子的·你要处理的在第几个分隔符(有时候是逗号有时候的 \t )后面,然后就可以根据分隔符进行分割成列表使用下标把处理的数据提取等(这只是举例一个操作)、
3. 弄清处理后输出的数据样子和结构
就比如说MapReduce的Map是每行做完了在另一个存储区等待,当Map阶段完成了这些每行的键值对会组合起来成一个字典传到的下一个地方,会在那个地方等待其他机子的Map任务完成,然后把多机子的 Map 输出的字典合并成大字典给 Reduce,弄清处理输出的数据样子和结构才方便数据的二次处理,比如说 MapReduce 这个框架的灵活度不够,遇到复杂灵活的数据处理逻辑时 就需要 执行多个 MapReduce 来完成 数据处理工作,弄清输出数据方便顺利的二次数据读取,这个一般情况其实可以不考虑的,因为大部分的时候输出数据的样子和结构都很明显,只是遇到一些比较特效的框架时候 这个信息 可能就比较隐晦 需要自己去找