Python海量数据处理之_Hadoop&Spark
Python 海量数据处理之
_Hadoop&Spark
1. 说明
前篇介绍了安装和使用 Hadoop,本篇将介绍 Hadoop+Spark
的安装配置及如何用 Python 调用 Spark。
当数据以 TB,PB 计量时,用单机处理数据变得非常困难,于是使用 Hadoop
建立计算集群处理海量数据,Hadoop 分为两部分,一部分是数据存储
HDFS,另一部分是数据计算 MapReduce。MapReduce 框架将数据处理分成
map,reduce
两段,使用起来比较麻烦,并且有一些限制,如:数据都是流式的,且必须所有
Map 结束后才能开始 Reduce。我们可以引入 Spark 加以改进。
Spark 的优点在于它的中间结果保存在内存中,而非 HDFS
文件系统中,所以速度很快。用 Scala
语言可以像操作本地集合对象一样轻松地操作分布式数据集。虽然它支持中间结果保存在内存,但集群中的多台机器仍然需要读写数据集,所以它经常与
HDFS 共同使用。因此,它并非完全替代 Hadoop。
Spark 的框架是使用 Scala 语言编写的,Spark
的开发可 ...
Python海量数据处理之_Hadoop(三)程序调用
Python 海量数据处理之
_Hadoop(三)程序调用
1. 说明
前两篇分别介绍了 Hadoop
的配置方法和基本原理,本篇将介绍如何让程序借助 Hadoop
调用服务器集群中的算力。Hadoop 是 Java 语言实现的,它不仅支持
Java,还支持 C++,Python 等程序的分布计算。下面以 Python
为例介绍如何使用 Hadoop 的 MapReduce 功能。
2. 工作过程
在原理部分介绍过,Hadoop
分为两部分,一部分是存储,一部分是运算,而各个部分又可分为主控和局部实现。这里忽略细节,主要说明运算的主控部分是如何运作的。
从程序调用的角度看,程序员首先需要把待处理的文件复制到 HDFS
文件系统之中,然后调 Hadoop 提供的 java 程序执行分布计算,具体需要执行的
python 代码用参数的形式提供;最后在 HDFS
生成输出文件,程序员再将其拷回本地即可。
这里的分布计算主要指 MapReduce,MapReduce
框架将输入数据分割成数据块,传给 Mapper,然后 Map
任务在各个服务器上以完全并行的方式处理,接着 Ma ...
Python海量数据处理之_Hadoop(二)概念和原理
Python 海量数据处理之
_Hadoop(二)概念和原理
1. 说明
Hadoop
是个分布式的架构,它将海量数据处理工作分配到集群中的多个机器上运行。前篇介绍了
Hadoop 的安装,在安装过程中会产生一些疑问,比如 NameNode
是什么东西?本篇就以问题&解答的方式介绍 Hadoop
的相关概念及其原理。
2.
NameNode,DataNode,以及 Secondary NameNode
把 Hadoop 分为 HDFS 和 MapReduce。HDFS 为数据提供了存储,MapReduce
为数据提供了计算。
NameNode,DataNode 以及 Secondary NameNode
都是属于存储部分,NameNode
主要负责管理元信息,如文件名,目录结构,属性,数据块存储位置等等。DataNode
负责数据块的具体存取。SecondaryNameNode 是 NameNode
的辅助工具,有两个作用,一是镜像备份,二是日志与镜像的定期合并,注意:它并不是
NameNode 的备份。
3. ResourceManager 与
NodeManager ...
Python海量数据处理之_Hadoop(一)集群搭建
Python 海量数据处理之
_Hadoop(一)集群搭建
1. 说明
数据处理时,可能会遇到数千万以及上亿条数据的情况。如果一次性处理所有数据,就会遇到内存不够,计算时间太长等问题。上篇《Python
海量数据处理之 _
单机优化》讲述了单机的处理大数据的解决方案。下面将讲述如何利用服务器集群处理大数据,这里使用的工具是
Hadoop,内容太多,分为三部分介绍,本篇是第一部分集群搭建,后两部分分别是原理和
python 调用。
2. Hadoop 简介
如果有多台用于数据计算的机器,可以使用 Hadoop
框架建立集群,统一分配布属。Hadoop 是由 Apache
基金会所开发的分布式系统基础架构,最核心的设计是:HDFS 和
MapReduce。HDFS 为数据提供了存储,MapReduce 为数据提供了计算,其中
Mapper 指的就是拆分处理,Reducer
指的就是将结果合并。和单机一样,核心也是拆分,处理,再合并。
多台机器同时处理数据,相对更复杂,需要考虑:数据共享,同步,冲突,资源分析,计算顺序,以及主控宕机等等问题。
3. Hadoop 安装
首先, ...
Python海量数据处理之_单机优化
Python 海量数据处理之 _
单机优化
1. 说明
数据处理时,可能会遇到数千万以及上亿条数据的情况。一次处理所有数据,会遇到内存不够,计算时间太长等问题。一般的解法是:先拆分,再处理,最后将处理的结果合并(当然数据少的时候不需要这么麻烦)。本文将介绍在单机上,只使用
Python 如何处理大量数据。
2. 实例
本例是天池大数据竞赛中的“淘宝穿衣搭配”比赛,这是一个新人赛,只要注册参赛,即可下载数据。目标是根据商品信息,专家推荐,用户购物信息,计算出最佳商品组合。
本例中处理的是用户购物信息“表 1”:每条记录包含用户号 uid,商品号
mid,购物时间 time。
1234uid,mid,time4371603,8,201504188034236,8,201505166135829,8,20150405
需要统计每个用户都购买了什么物品,即生成“表 2”:记录包含用户号
uid,商品组合 mids。
123uid,mids15 "1795974,1852545,98106,654166"20 "2639977,79267" ...
Python之DataFrame数据处理
Python 之 DataFrame 数据处理
1. 说明
DataFrame 是 Pandas 库中处理表的数据结构,可看作是 python
中的类似数据库的操作,是 Python 数据挖掘中最常用的工具。下面介绍
DataFrame 的一些常用方法。
2. 遍历
1) 代码
12345678import pandas as pdimport mathdf=pd.DataFrame({'key':['a','b','c'],'data1':[1,2,3],'data2':[4,5,6]}) print(df)for idx,item in df.iterrows(): print(idx) print(item)
2) 结果
12345678910 data1 data2 key0 1 4 a1 2 5 b2 3 6 c0data1 1data2 ...
实战微博互动预测之三_xgboost答疑解惑
实战微博互动预测之三
_xgboost 答疑解惑
1. 说明
前两篇完成了特征工程的相关工作:加入用户的统计特征,分析文本信息内容,并作为新特征加入了数据集。
本篇我们来看看算法,实战微博互动预测(后简称本例)的评估算法如下:
公式中 f 代表转发,c 代表评论,l 代表赞,p 代表预测,r
代表真实值;deviation 是真实值与预测值的偏差,具体公式如下:
precision 是准确率,根据偏差算出:
sig 为符号函数,当 x>0 时 sig(x)=1,当 x<=0 时,sig(x) 为
0。Counti 为每篇的反馈总数,当 Counti>100 时,以按 100 计算。
与大多数评估算法不同,本例中每个实例有不同权重,反馈越多实例权重越大。而我们常用的算法比如
GBDT
是根据误差迭代改进的,默认情况下各实例权重是一样的,这块儿需要单独处理一下。
具体算法还是使用 xgboost 库,之前看到的大多数关于 xgboost
的文章,要么是讲数学原理,要么是参数的中文说明,xgboost
似乎还是一个黑盒,下面就结合具体问题看看 xgboo ...
实战微博互动预测之二_中文分析
实战微博互动预测之二 _
中文分析
#算法实战 #自然语言处理
1. 说明
前篇《实战微博互动预测之一 _
问题分析》中,已经对微博的整体反馈情况,以及单个用户的反馈做了初步的分析。本篇将从微博的信息内容中提取更多特征。
文本分析是数据分析中的常用技术,使用范围很广,比如:信息搜索,内容推荐,文章分类,内容提取等等。其核心是分析连续的文本,抽取关键数据,再进行下一步分析。
2. 文本分析
1) TF-IDF 算法
TF-IDF 是一种统计方法,TF 指词频,IDF 是逆向文件频率。TF
好理解,就是词在文章中出现的频率,出现频率高的词更可能是文章的关键词。但有些词如:“是”,“的”,“了”(即停用词)在任何文章出现频率都高,于是使用
IDF。IDF
通过总文件数目除以包含该词语之文件的数目,再将商取对数得到,它弱化了常用词的权重。TF-IDF
倾向于过滤掉常见的词语,保留重要的词语。
2) 中文分词
中文分析一般以词为单位,与英文不同的是中文的词与词之间没有空格划分,所以处理时,首先要分词。简单的方法是把所有词放在一个词典中,通过正向匹配,逆向匹配,双向匹配等方式分词,这 ...
实战微博互动预测之一_问题分析
实战微博互动预测之一 _
问题分析
#算法实战
1. 天池竞赛平台
微博互动预测是一个天池平台的竞赛,和其它平台相比,天池的数据量更大,赛题更接近实际场景。微博互动比赛算是其中比较小的,训练数据也有
300
多M,上百万条记录(虽然数据较多,但也是普通开发机可以处理的量级)。数据内容也比较丰富,和提供匿名纯特征拼算法的竞赛相比,它需要研究业务,发挥的空间也更大。
天池平台的大多数比赛分为线下赛和线上赛。第一阶段线下赛和 Kaggle,DC
差不多,就是在本地计算,然后上传预测结果,线上评分排名(每天两次),如果第一阶段排名靠前,可进入第二阶段线上赛,线上赛使用天池平台算力和工具,海量数据,支持分布计算,但也被线上工具所限。
2. 新浪微博互动预测
微博互动预测是前两年的赛题,现在仍开放线下赛,可以上传预测结果,计分并排名。它代表了现实中的一大类应用:数据量大,需要参赛者提取特征,数据有现实中的意义,无规律数据占多数,可多维度分析等等。赛题具体见:
https://tianchi.aliyun.com/getStart/introduction.htm?spm=5176.10 ...
实战人品预测之三_向高手学习
实战人品预测之三 _
向高手学习
这是本系列“实战人品预测”的最后一篇:向高手学习。在之前的两篇:《实战人品预测之一
_ 国内大数据竞赛平台》和《实战人品预测之二 _ 热门模型
xgboost》中我们尝试了 DataCastle
平台的“微额借款用户人品预测大赛”,对数据不做任何处理,仅用 xgboost
模型,经过 50000 次迭代,最终得分 0.70,据说该代码最高得分可到
0.717。距比赛中的最高分 0.734 仅 0.017 之差。前 400 名得分均在 0.70
以上,这最后的差距究竟在哪?
本篇以学习冠军“不得直视本王”(后简称大王)的竞赛报告书和代码的方式,向大王致敬,同时对比自己的不足,开拓思路,学习一些书本上没有的实战技巧。
竞赛报告书原文:http://blog.csdn.net/bryan__/article/details/50977513,内附源码地址。
##1. 思路
我们看到大多数挖掘比赛都不修改模型,甚至上来就直接代入
xgboost。参赛者的主要的工作是:特征工程,模型调参,组合模型。模型调参在上篇上已经详细说过了,本篇以介绍特征工 ...