数据处理

Pandas数据处理——盘点那些常用的函数

谁都会走 提交于 2020-03-01 20:18:31
.head() 作用对象: Series 和 DataFrame 主要用途:返回 DataFrame 的前N行。当数据量较大时,使用 .head() 可以快速对数据有个大致了解。 用法: In [16]: data.head() Out[16]: company salary age 0 NaN 43 21 1 A 8 41 2 A 28 26 3 C 42 28 4 A 33 26 .info() 作用对象: Series 和 DataFrame 主要用途:打印所用数据的一些基本信息,包括索引和列的数据类型和占用的内存大小。 用法: In [17]: data.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 9 entries, 0 to 8 Data columns (total 3 columns): company 8 non-null object salary 9 non-null int32 age 9 non-null int32 dtypes: int32(2), object(1) memory usage: 224.0+ bytes .describe() 作用对象: Series 和 DataFrame 主要用途:生成描述性统计汇总,包括数据的计数和百分位数,有助于了解大致的数据分布 用法:

第一个MapReduce程序-词频统计

∥☆過路亽.° 提交于 2020-03-01 16:16:05
最终结果展示: 一.MapReduce的概念   1)MapReduce是一个离线计算的框架   2)MPAReduce是基于HDFS之上的,没有HDFS就没有MapReduce   3)MapReduce由两个阶段组成:Map和Reduce,用户只需实现map()和reduce()即可完成分布式计算   4)Map阶段:逐个遍历【用来收集数据的】   5)Reducer阶段:做合并操作【用来合并数据】 二.具体实现 1.创建maven项目,导入jar包 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--COMMON是hadoop一切的核心--> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.3</version> </dependency

Hadoop整合压缩知识点整理

守給你的承諾、 提交于 2020-03-01 16:02:33
简介 压缩:原始数据通过压缩手段产生目标数据,要求输入和输出的内容是一样的(大部分),但体积是不一样的。 对于单机用户来说,磁盘空间的限制导致了文件压缩的需求;对于Hadoop用户来说,由于DataNode的限制,也要对HDFS上的数据进行压缩。压缩的目的是减少存储在HDFS上的数据所占用的空间(磁盘的角度),提升网络的传输效率(网络的角度)。对于分布式计算框架来说,Shuffle是一个主要的技术瓶颈。 大数据处理流程基本上是 输入==>处理==>输出 ,举例来说,在离线处理方面,Spark可以 HDFS==>Spark==>HDFS ,在实时处理方面,Spark Streaming可以 Kafka==>Spark Streaming==>RDBMS 。压缩可以使用在输入时,也可以使用在处理时(比如map作为中间状态,它的输出可以压缩以减少Shuffle的量),输出时。 MR在进行压缩数据处理时,不需要手工去处理。但是MR执行过程中,是需要一个动作进行数据压缩、解压的,MR根据后缀名进行处理。在处理压缩、解压的过程中,是有CPU资源的消耗的。如果集群本来CPU使用率很高,就会对其他作业产生影响,不建议使用压缩。 常见的压缩格式有 GZIP、BZIP2、LZO、SNAPPY 。选择压缩格式要从压缩比、压缩速度考虑。不同的压缩格式对应不同的codec。 BZip2Codec压缩:

Hadoop中的七大节点的作用(HA with QJM)

泪湿孤枕 提交于 2020-03-01 02:51:13
Hadoop逻辑图: 1、NameNode(NN) -NameNode主要功能: 接收客户端的读写服务 -NameNode保存metadate信息包括: (metadate时元数据:除文件内容后的所有数据) 文件owership和permissions 文件包括哪些块 Block保存在哪几个DataNode(由DataNode启动时上报) -NameNode的metadate 信息在启动后会加载到内存中 metadate存储到磁盘文件名为“fsimage” Block的位置信息不会保存到fsimage edits记录对metadate的操作日志 2、DataNode (DN) -存储数据(Block) -启动DN线程的时候会向NN汇报block信息 -通过NN发送心跳保持与其联系(默认3秒) 如果NN十分钟没有收到DN的心跳,则认为已经lost,并copy其上的block到其他的DN上 Block的副本防止策略 -第一个副本:放置在上传文件的DN中;如果是集群外提交,则随机挑选一台磁盘不太满,cpu不太忙的节点上。 -第二个副本:放置在于第一个副本不同的机架节点上。 -第三个副本:与第二个副本相同机架的节点上 -更多副本:随即节点 3、zookeeper(ZK) Zookeeper来保证在Active NameNode失效时及时将Standby

HBase介绍和工作原理

∥☆過路亽.° 提交于 2020-02-29 22:19:04
Hbase简介 HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、 实时读写的分布式数据库 利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理 HBase中的海量数据,利用Zookeeper作为其分布式协同服务 主要用来存储非结构化和半结构化的松散数据(列存NoSQL数据库) HBase数据模型 命名空间 命名空间是对表的逻辑分组,不同的命名空间类似于关系型数据库中的不同的Database数据库。利用命名空间,在多租户场景下可做到更好的资源和数据隔离。 表 对应于关系型数据库中的一张张表,HBase以“表”为单位组织数据,表由多行组成。 行 表的主键,按照字典序排序。 列族 每一行由若干列族组成,每个列族下可包含多个列。物理上,同一列族的数据存储在一起。 列限定符 列由列族和列限定符唯一指定,像如上的name、age即是列族的列限定符。 单元格 单元格由RowKey、列族、列限定符唯一定位,单元格之中存放一个值(Value)和一个版本号。 时间戳 单元格内不同版本的值按时间倒序排列,最新的数据排在最前面 hbase 的架构 Client 是客户端,要求读写数据的发起者。 ZK 集群 是负责转发 Client 的请求和提供心跳机制,会让 HRegion Server 和 HRegion 注册进来, 同时保存着

彻底搞懂spark的shuffle过程(shuffle write)

瘦欲@ 提交于 2020-02-29 22:00:29
什么时候需要 shuffle writer 假如我们有个 spark job 依赖关系如下 我们抽象出来其中的rdd和依赖关系: E <-------n------, C <--n---D---n-----F--s---, A <-------s------ B <--n----`-- G 对应的划分后的RDD结构为: 最终我们得到了整个执行过程: 中间就涉及到shuffle 过程,前一个stage 的 ShuffleMapTask 进行 shuffle write, 把数据存储在 blockManager 上面, 并且把数据位置元信息上报到 driver 的 mapOutTrack 组件中, 下一个 stage 根据数据位置元信息, 进行 shuffle read, 拉取上个stage 的输出数据。 这篇文章讲述的就是其中的 shuffle write 过程。 spark shuffle 演进的历史 Spark 0.8及以前 Hash Based Shuffle Spark 0.8.1 为Hash Based Shuffle引入File Consolidation机制 Spark 0.9 引入ExternalAppendOnlyMap Spark 1.1 引入Sort Based Shuffle,但默认仍为Hash Based Shuffle Spark 1.2

机器学习研究与开发平台的选择

[亡魂溺海] 提交于 2020-02-29 18:29:09
    目前机器学习可以说是百花齐放阶段,不过如果要学习或者研究机器学习,进而用到生产环境,对平台,开发语言,机器学习库的选择就要费一番脑筋了。这里就我自己的机器学习经验做一个建议,仅供参考。     首先,对于平台选择的第一个问题是,你是要用于生产环境,也就是具体的产品中,还是仅仅是做研究学习用? 1. 生产环境中机器学习平台的搭建     如果平台是要用于生产环境的话,接着有一个问题,就是对产品需要分析的数据量的估计,如果数据量很大,那么需要选择一个大数据平台。否则的话只需要一个单机版的平台就可以了。 1.1 生产环境中机器学习大数据平台的搭建     生产环境里面大数据平台,目前最主流的就是Spark平台,加上辅助的分布式数据处理容器,比如YARN,或者Mesos.如果需要实时的收集在线数据,那么就加上Kafka。简言之,一个通用的大数据处理平台就是集成Spark + YARN(Mesos) + Kafka. 我现在做的产品项目都是基于Spark + YARN+ Kafka的,目前来看,这个平台选择基本上是主流的方向。     当然,有人会说,这么多开源软件,一起集成起来好麻烦,大坑肯定不少,有没有一个通用的平台,可以包括类似Spark + YARN+ Kafka的大数据平台功能呢?目前据我所知,做的比较好的有CDAP(http://cdap.io)。它对Spark,

海量数据处理:十道面试题与十个海量数据处理方法总结

谁说我不能喝 提交于 2020-02-29 16:44:19
1、海量日志数据,提取出某日访问百度次数最多的那个IP。 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。 或者如下阐述(雪域之鹰): 算法思想:分而治之+Hash 1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理; 2.可以考虑采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址; 3.对于每一个小文件,可以构建一个IP为key,出现次数为value的Hash map,同时记录当前出现次数最多的那个IP地址; 4.可以得到1024个小文件中的出现次数最多的IP,再依据常规的排序算法得到总体上出现次数最多的IP; 2、搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个

[转]海量数据处理的面试题的方法总结

喜你入骨 提交于 2020-02-29 16:36:20
处理海量数据问题,无非就是: 分而治之/hash映射 + hash统计 + 堆/快速/归并排序; Bloom filter/Bitmap; Trie树/数据库/倒排索引; 外排序; 分布式处理之hadoop/mapreduce。 本文接下来的部分,便针对这5种方法模式结合对应的海量数据处理面试题分别具体阐述。 密匙一、分而治之/hash映射 + hash统计 + 堆/快速/归并排序 1、海量日志数据,提取出某日访问百度次数最多的那个IP。 既然是海量数据处理,那么可想而知,给我们的数据那就一定是海量的。针对这个数据的海量,我们如何着手呢?对的,无非就是分而治之/hash映射 + hash统计 + 堆/快速/归并排序,说白了,就是先映射,而后统计,最后排序: 分而治之/hash映射:针对数据太大,内存受限,智能是:把大文件化成(取模映射)小文件,即16字方针:大而化小,各个击破,缩小规模,逐个解决 hash统计:当大文件转化了小文件,那么我们便可以采用常规的hashmap(ip,value)来进行频率统计。 堆/快速排序:统计完了之后,便进行排序(可采取堆排序),得到次数最多的IP。 具体而论,则是: “首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000

Spark 入门(Python、Scala 版)

帅比萌擦擦* 提交于 2020-02-29 09:44:17
本文中,我们将首先讨论如何在本地机器上利用Spark进行简单分析。然后,将在入门级水平探索Spark,了解Spark是什么以及它如何工作(希望可以激发更多探索)。最后两节将开始通过命令行与Spark进行交互,然后演示如何用Python写Spark应用,并作为Spark作业提交到集群上。同时也会提供相应的 Scala 版本。 1、设置Spark环境 在本机设置和运行Spark非常简单。你只需要下载一个预构建的包,只要你安装了Java 6+和Python 2.6+,就可以在Windows、Mac OS X和Linux上运行Spark。确保java程序在PATH环境变量中,或者设置了JAVA_HOME环境变量。类似的,python也要在PATH中。 假设你已经安装了Java和Python,以及 Spark,如果没有请参照之前的教程: 《Spark 伪分布式 & 全分布式 安装指南》: http://my.oschina.net/leejun2005/blog/394928 注意:如果要用到下文的 pyspark,则需要设置 python 相关的 spark 包路径: vi .bashrc export PYTHONPATH=$SPARK_HOME/python/:$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH 否则会报错: