大数据
BIG DATA
神之凝视
这个作者很懒,什么都没留下…
展开
-
NumPy基础:数组和矢量计算
一.ndarrayNumPy最重要的一个特点就是其N维数组对象ndarray,该对象是一个快速而灵活的大数据集容器。可以利用这个数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样:ndarray是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。每个数组都有一个shape【表示各维度大小的元组】和一个dtype【用于说明数组数据类型的对象】:二.创建ndarray创建数组最简单的办法就是使用array函数。它接受一切序列型的对象,然后产生一个新的含有传入数据的Nu原创 2020-11-18 16:19:25 · 438 阅读 · 0 评论 -
Flink高级特性之检查点
一.概述Flink中的每个函数和运算符都可以是有状态的。有状态功能在处理单个元素/事件的过程中存储数据,使状态成为任何类型的更复杂操作的关键构建块。为了使状态容错,Flink需要检查点状态。检查点允许Flink恢复流中的状态和位置,从而为应用程序提供与无故障执行相同的语义。二.先决条件Flink的检查点机制与流和状态的持久存储交互。通常,它要求:持久(或耐用,可以重放某个时间段内一定量的记录)的数据源。此类消息源是持久消息队列(例如,Apache Kafka,RabbitMQ,Amazon Ki原创 2020-11-12 11:24:29 · 835 阅读 · 0 评论 -
Spark SQL常用配置及性能优化
一.在内存中缓存数据Spark SQL可以通过调用spark.catalog.cacheTable(“tableName”)或使用dataFrame.cache()内存列式格式缓存表。然后,Spark SQL将仅扫描所需的列,并将自动调整压缩以最大程度地减少内存使用和GC压力。可以调用spark.catalog.uncacheTable(“tableName”)从内存中删除表或dataFrame.unCache()取消缓存。可以在SparkSession上使用setConf方法或使用SQL运行SET k原创 2020-10-24 19:52:00 · 2853 阅读 · 0 评论 -
Flink之广播状态模式
一.提供的API为了展示所提供的API,我们将以一个示例开始,然后介绍其完整功能。作为正在运行的示例,我们将使用这样的情况,其中有一系列不同颜色和形状的对象,并且我们希望找到遵循某种模式的相同颜色的对象对,例如矩形后跟三角形。我们假设这组有趣的模式会随着时间而演变。在此示例中,第一个流将包含Item带有Color和Shape属性的type元素。另一个流将包含Rules。从流开始Items,我们只需要键入它的Color,因为我们要对相同颜色的。这将确保相同颜色的元素最终出现在同一台物理计算机上。//原创 2020-10-15 20:21:15 · 1987 阅读 · 0 评论 -
TF-IDF词频逆文档频率算法
TF-IDF词频逆文档频率(TF-IDF) 是一种特征向量化方法,广泛用于文本挖掘中,以反映术语对语料库中文档的重要性。用t表示术语,用d表示文档,用D表示语料库。TF(t,d) 表示术语频率是术语在文档中出现的次数,而DF(t,D)文档频率是包含术语的文档在语料库中出现的次数。如果我们仅使用术语频率来衡量重要性,那么很容易过分强调那些经常出现但几乎不包含有关文档信息的术语,例如“a”,“the”和“of”。如果术语经常出现在整个语料库中,则表示该术语不包含有关特定文档的特殊信息。逆文档频率度量的是一个术原创 2020-09-17 17:05:36 · 2999 阅读 · 0 评论 -
Spark MLlib之管道
一.ML管道ML管道提供基于DataFrame的统一高级API集,可帮助用户创建和调整实用的机器学习管道。二.管道中的主要概念MLlib对用于机器学习算法的API进行了标准化,从而使将多种算法组合到单个管道或工作流中变得更加容易。DataFrame:此ML API使用DataFrame作为ML数据集,可以保存各种数据类型。例如,一个DataFrame可能有不同的列,用于存储文本,特征向量,真实标签和预测。Transformer:一个Transformer是一种算法,其可以将一个DataFrame原创 2020-09-10 19:20:37 · 431 阅读 · 0 评论 -
Flink状态与容错【状态生存时间TTL,清理过期状态】
一.状态生存时间(TTL)任何类型的键控状态都可以配置状态的生存期(TTL)。如果配置了TTL且状态值已过期,则将尽力清除存储的值。所有状态收集类型均支持按条目TTL。这意味着列表元素和映射条目独立过期。为了使用状态TTL,必须首先构建一个StateTtlConfig配置对象。然后可以通过传递配置在任何状态描述符中启用TTL功能:import org.apache.flink.api.common.state.StateTtlConfigimport org.apache.flink.api.co原创 2020-09-04 15:16:36 · 2475 阅读 · 2 评论 -
GraphX图计算之aggregateMessages算子案例详解
一.简介GraphX中的核心聚合操作为aggregateMessages。该运算符将用户定义的sendMsg函数应用于图形中的每个边三元组,然后使用该mergeMsg函数在其目标顶点处聚合这些消息。class Graph[VD, ED] { def aggregateMessages[Msg: ClassTag]( sendMsg: EdgeContext[VD, ED, Msg] => Unit, mergeMsg: (Msg, Msg) => Msg,原创 2020-09-03 17:39:10 · 802 阅读 · 0 评论 -
Flink最佳实践
一.传递参数几乎所有的Flink应用程序(批处理和流式处理)都依赖于外部配置参数。它们用于指定输入和输出源(如路径或地址),系统参数(并行度,运行时配置)和特定于应用程序的参数(通常在用户功能内使用)。Flink提供了一个简单的实用程序,称为ParameterTool提供解决这些问题的一些基本工具。请注意,使用ParameterTool不是必须的。其他框架(例如Commons CLI和 argparse4j)也可以与Flink一起使用。将配置值放入ParameterTool所述ParameterTo原创 2020-08-26 20:30:04 · 540 阅读 · 0 评论 -
基于GraphX实现社交网络分析
一.社交网络分析的主要应用在分析复杂的社会、技术以及信息系统时,我们常把这些系统描述成网络的形式。在这样的关系网络中,节点代表一个成员,而边就代表成员之间的关系。在现实生活中,一个人可能从属于不同的团体,比如其工作的部门、生活的小区、同学圈子等等。如果能把这些不同的圈子自动分析出来,大到舆情监控,小到推荐好友以及扩展新用户、精准广告投放等,这些场景都能通过社交网络分析来提升效果。结合目前日益火爆的“大数据”,这就是应用大数据来解决实际问题的一个很好的例子。所谓圈子,就是把人归属到 不同的群体中。落实到算原创 2020-08-20 15:43:51 · 1390 阅读 · 0 评论 -
Spark GraphX图计算入门
一.什么是图计算图计算,可以简单理解为以图这种数据结构为基础,整合相关算法来实现对应应用的计算模型。社交网络中人与人之间的关系,如果用计算机数据结构表示,最合适的就是图了。其中图的顶点表示社交中的人,边表示人与人之间的关系。所以要做社交网络分析,先要了解图计算,这是整个分析的基础。也正如此,Spark的图计算库叫GraphX。二.图的基本概念图是基础的数据结构,和链表、树不同,它是一种非线性数据结构。其基本结构很简单,如下图:一个图由定点集V和定点间的关系集合E组成,可以用二元组定义为G=(V,E原创 2020-08-17 19:03:24 · 2429 阅读 · 0 评论 -
Flink流计算之聚合函数
一.Reduce功能ReduceFunction指定如何将输入中的两个元素组合在一起以产生相同类型的输出元素。Flink使用ReduceFunction来逐步聚合窗口的元素。ReduceFunction可以定义像这样使用:val input: DataStream[(String, Long)] = ...input .keyBy(<key selector>) .window(<window assigner>) .reduce { (v1, v2原创 2020-08-07 18:18:34 · 4094 阅读 · 0 评论 -
Tensorflow手写数字识别
一.MNIST数据集当我们开始学习编程的时候,第一件事往往是学习打印"Hello World"。就好比编程入门有Hello World,机器学习入门有MNIST。MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片:它也包含每一张图片对应的标签,告诉我们这个是数字几。比如,上面这四张图片的标签分别是5,0,4,1。为了便于下载MNIST数据集,执行下面的python代码【需要提前安装好tensorflow】可以将该数据集下载到本地:from tensorflow.examples.t原创 2020-08-04 19:16:27 · 1901 阅读 · 1 评论 -
Spark Streaming之容错&高可用
一.背景Spark的RDD的基本容错语义:RDD是一个不变的,确定性可重新计算的分布式数据集。每个RDD都会记住在容错输入数据集上用于创建它的确定性操作的血缘关系。如果由于工作节点故障而导致RDD的任何分区丢失,则可以使用操作血缘关系从原始的容错数据集中重新计算该分区。假设所有RDD转换都是确定性的,则最终转换后的RDD中的数据将始终相同,而不管Spark集群中的故障如何。Spark在容错文件系统【例如HDFS或S3】中的数据上运行。因此,从容错数据生成的所有RDD也是容错的。但是,Spark原创 2020-07-31 18:14:21 · 254 阅读 · 0 评论 -
Flink窗口概述及用法详解
一.简介窗口window是处理无限流的核心。窗口将流分成有限大小的“存储块”,我们可以在其上应用计算。本博客重点介绍如何在Flink中执行窗口化,以及程序员如何从其提供的功能中获得最大收益。窗口式Flink程序的一般结构如下所示。第一个片段指的是键控流,而第二个片段指的是非键控流。正如人们所看到的,唯一的区别是keyBy(…)使用window操作键控流和使用windowAll(…)操作的非键控流。键控窗口stream .keyBy(...) <- k原创 2020-07-30 17:47:16 · 2096 阅读 · 0 评论 -
Flink常用转换算子及物理分区
一.转换算子原创 2020-07-29 18:59:10 · 315 阅读 · 0 评论 -
Spark Streaming之内存调优
一.内存调优Spark Streaming应用程序所需的集群内存大小在很大程度上取决于所使用的转换类型。例如,如果要对最后10分钟的数据使用窗口操作,则集群应具有足够的内存以将10分钟的数据保存在内存中。或者,如果想使用updateStateByKey操作大量的kv类型数据,则所需的存储空间会很大。相反,如果想执行一个简单的map-filter-store操作,则所需的内存将很少。通常,由于通过接收器接收的数据存储在StorageLevel.MEMORY_AND_DISK_SER_2中,因此无法容纳在内原创 2020-07-27 19:10:28 · 757 阅读 · 0 评论 -
Spark内存管理及调优
一.对象存储概述在调整内存使用中有三个方面需要考虑:对象存储所使用的内存【可能希望在内存中存储整个数据集,以方便使用】、访问这些对象的成本及垃圾回收的开销【对象更新频繁】。默认情况下,Java对象的访问速度很快,但是与其字段内的原始数据相比,它们很容易消耗2-5倍的空间。原因如下:每个不同的Java对象都有一个对象头,大约16个字节,其中包含诸如指向其类的指针之类的信息。对于其中数据很少的对象【例如一个Int字段】,该对象头大小可能大于数据本身。Java String类型相对于原始字符串数据有大约原创 2020-07-24 17:34:34 · 331 阅读 · 0 评论 -
Spark Streaming之性能调优
一.简介要在集群上的Spark Streaming应用程序中获得最佳性能,需要进行一些调整。可以调整以提高应用程序性能的许多参数和配置。从高层次上讲,需要考虑两件事:通过有效地使用群集资源来减少每批数据的处理时间。设置正确的批处理大小,以便可以按接收到的批处理速度处理一批数据【也就是说,数据处理跟上数据摄取的速度】。由于大多数Spark计算的内存性质,Spark程序可能会受到群集中任何资源【CPU,网络带宽或内存】的瓶颈。通常,如果数据适合内存,则瓶颈是网络带宽,但是有时,还需要进行一些调整,例原创 2020-07-23 19:12:11 · 301 阅读 · 0 评论 -
Spark Streaming应用程序【部署、升级、监控】
一.部署应用要部署运行Spark Streaming应用程序,需要具备以下条件。使用集群管理器进行集群部署,这是任何Spark应用程序的一般要求。将应用程序JAR打包 ,必须将流式应用程序编译为JAR。如果spark-submit用于启动应用程序,则无需在JAR中提供Spark和Spark Streaming。但是,如果应用程序使用高级数据源【例如Kafka】,则必须将它们链接到的额外工件及其依赖项打包在用于部署应用程序的JAR中。例如,使用的应用程序KafkaUtils 必须将spark-stre原创 2020-07-22 20:29:29 · 395 阅读 · 0 评论 -
Spark Streaming之检查点
一.缓存/持久化与RDD相似,DStream也允许开发人员将流的数据持久存储在内存中。也就是说,在DStream上使用persist()方法将自动对该DStream的每个RDD持久存储在内存中。如果DStream中的数据将被多次计算(例如,对同一数据进行多次操作),这将很有用。对于基于窗口操作reduceByWindow和reduceByKeyAndWindow以及基于状态操作的updateStateByKey而言,这都是隐含的。因此,由基于窗口操作生成的DStream会自动保存在内存中,而无需开发人员调原创 2020-07-21 17:46:03 · 464 阅读 · 0 评论 -
SparkStreaming中使用DataFrame和SQL操作
一.简介可以轻松地对流数据使用DataFrames和SQL操作。StreamingContext和其使用的SparkContext必须来自同一个SparkSession。以便可以在驱动程序故障时重新启动它。这是通过创建SparkSession的延迟实例化单例实例来完成的。在下面的示例中,修改了前面的单词计数示例,以使用DataFrames和SQL生成单词计数。每个RDD都转换为一个DataFrame,注册为临时表,然后使用SQL查询。二.代码实战package spark2.streamingim原创 2020-07-13 15:50:00 · 781 阅读 · 0 评论 -
SparkStreaming之数据输出
一.简介输出操作允许将DStream的数据推出到外部系统,例如数据库或文件系统。由于输出操作实际上允许外部系统使用转换后的数据,因此它们会触发所有DStream转换的实际执行【类似于RDD的操作】。二.算子翻译:...原创 2020-07-11 18:23:50 · 679 阅读 · 0 评论 -
Spark获取HBase海量数据方式之Scan
一.简介Scan扫描,类似于数据库系统中的游标,底层依赖顺序存储的数据结构。扫描操作的作用跟get()方式非常类似,但由于扫描操作的工作方式类似于迭代器,所以用户无需调用scan()方法创建实例,只需调用HTable的getScanner()方法【或者使用new Scan()】,此方法在返回真正的扫描器scanner实例的同时,用户也可以使用它的迭代来获取数据。如下:ResultScanner getScanner(Scan scan) throws IOExceptionResultScanner原创 2020-07-07 20:13:08 · 1104 阅读 · 1 评论 -
SparkStreaming DStream关联操作【流流关联、流数据集关联】
一.流流关联1.普通流流连接 val lines = ssc.socketTextStream("master",9999) val words = lines.flatMap(_.split(" ")) .map(word => (word,1)) .reduceByKey(_ + _) val result = words.join(words)在此,在每个批处理间隔中,stream1的RDD将与stream2的RDD关联在一起。也可以做l原创 2020-07-04 17:38:20 · 948 阅读 · 0 评论 -
Spark ML基本算法【总结器】
一.简介通过使用Summarizer提供矢量列【向量、矩阵】汇总统计Dataframe。可用的指标是按列的最大值,最小值,平均值,总和,方差,std和非零数,以及总数。二.代码实战【以均值、方差为例】package spark2.mlimport org.apache.log4j.{Level, Logger}import org.apache.spark.ml.linalg.{Vector, Vectors}import org.apache.spark.sql.SparkSessioni原创 2020-07-03 15:03:44 · 3248 阅读 · 0 评论 -
Spark ML常见异常【Vector】
一.常见分析在Spark 机器学习中,Vector向量和Metricx矩阵是最常用的两种数据类型。特别是Vector向量类型,在使用Vector向量类型时,默认是不会导入Spark定义的Vector类型的。默认使用scala.collection.immutable.Vector,此时使用Spark ml算法就会报类型异常。代码:val (meanVal, varianceVal) = df.select(metrics("mean", "variance").summary($"features",原创 2020-07-03 14:20:10 · 844 阅读 · 0 评论 -
Spark ML基本算法【ChiSquareTest卡方检验】
一.简介假设检验是一种强大的统计工具,可用来确定结果是否具有统计学意义,以及该结果是否偶然发生。spark.ml当前支持Pearson的卡方测试独立性。ChiSquareTest针对标签上的每个功能进行Pearson的独立性测试。对于每个要素,(要素,标签)对将转换为列联矩阵,针对该列矩阵计算卡方统计量。所有标签和特征值必须是分类的。二.代码实战package spark2.mlimport org.apache.log4j.{Level, Logger}import org.apache.s原创 2020-07-02 20:38:59 · 1576 阅读 · 0 评论 -
Spark报Total size of serialized results of 12189 tasks is bigger than spark.driver.maxResultSize
一.异常信息Total size of serialized results of 12189 tasks is bigger than spark.driver.maxResultSize 1024M.Total size of serialized results of 12082 tasks is bigger than spark.driver.maxResultSize 1024M.Total size of serialized results of 12131 tasks is bigg原创 2020-06-29 17:21:54 · 5534 阅读 · 0 评论 -
Flink流连接器【数据源/接收器】
一.预定义的源和接收器Flink内置了一些基本数据源和接收器,它们始终可用。该预定义的数据源包括文件,目录和Socket,并可以加载集合和迭代器的数据。该预定义的数据接收器支持写入文件,输出信息和异常。二.捆绑式连接器连接器提供用于与各种第三方系统接口的代码。当前支持以下系统:Apache Kafka(源/接收器)Apache Cassandra(接收器)Amazon Kinesis Streams(源/接收器)Elasticsearch(接收器)Hadoop文件系统(接收器)Rabbi原创 2020-06-27 16:58:43 · 1014 阅读 · 0 评论 -
Flink流计算状态与容错【键控状态、操作状态、托管状态】
有状态的函数和运算符在处理单个元素/事件的过程中存储数据,从而使状态成为任何类型的更精细操作的关键构建块。包括:当应用程序搜索某些事件模式时,状态将存储到目前为止遇到的事件序列。在每分钟/小时/天汇总事件时,状态将保留待处理的汇总。在数据点流上训练机器学习模型时,状态保持模型参数的当前版本。当需要管理历史数据时,该状态允许有效访问过去发生的事件。Flink需要了解状态,以便使用检查点使状态容错并允许流应用程序的保存点。状态还允许重新缩放Flink应用程序,这意味着Flink负责在并行实例之原创 2020-06-25 20:05:01 · 661 阅读 · 0 评论 -
Spark ML基本算法【Correlation相关性】
一.简介计算两个系列数据之间的相关性是“统计”中的常见操作。spark.ml 提供了很多系列中的灵活性,计算两两相关性。目前支持的相关方法是Pearson和Spearman的相关。Correlation 使用指定的方法为向量的输入数据集计算相关矩阵。输出将是一个DataFrame,其中包含向量列的相关矩阵。二.代码实战package big.data.analyse.mlimport org.apache.log4j.{Level, Logger}import org.apache.spark原创 2020-06-25 12:01:58 · 2820 阅读 · 0 评论 -
Spark 机器学习库【MLlib】编程指南
一.机器学习库MLlib是Spark的机器学习库【ML】。其目标是使实用的机器学习算法变得可扩展且容易使用。在较高级别,它提供了以下工具:机器学习算法:常见的机器学习算法,例如分类,回归,聚类和协同过滤。特征化:特征提取,变换,降维和选择。管道:用于构建,评估和调整ML管道的工具。持久性:保存和加载算法、模型和管道。实用程序:线性代数,统计信息,数据处理等。二.基于DataFrame的API基于MLlib RDD的API现在处于维护模式。从Spark 2.0开始,软件包中基于RDD的A原创 2020-06-23 21:30:13 · 2077 阅读 · 0 评论 -
Spark2.x常见异常【InvalidPathException】
一.异常详细信息java.nio.file.InvalidPathException: Malformed input or input contains unmappable characters:./Spark2机器学习.jar...二.原因分析及解决方案由于中文名的文件,导致编译失败,解决方法如下:jar包的明细都使用英文或数字,规避使用中文。设置环境变量,指定编码:file.encoding = UTF-8。...原创 2020-06-22 17:26:29 · 484 阅读 · 0 评论 -
Spark Streaming窗口函数
一.简介Spark Streaming还提供了窗口计算,可以在数据的滑动窗口上应用转换。下图说明了此滑动窗口。如该图所示,每当窗口滑动在源DStream,落入窗口内的源RDDS被组合及操作以产生RDDS的窗口DStream。在这种特定情况下,该操作将应用于数据的最后3个时间单位,并以2个时间单位滑动。这表明任何窗口操作都需要指定两个参数。窗口长度 - 窗口的持续时间。滑动间隔 -进行窗口操作的间隔。这两个参数必须是源DStream的批处理间隔的倍数。让我们用一个例子来说明窗口操作。每10秒原创 2020-06-20 11:49:09 · 671 阅读 · 0 评论 -
Sparkstreaming常用算子详解
一.基本算子二.updateStateByKeyupdateStateByKey操作可以保持任意状态,同时不断用新信息更新它。要使用此功能,必须执行两个步骤。定义状态-状态可以是任意数据类型。定义状态更新功能-使用功能指定如何使用输入流中的先前状态和新值来更新状态。在每个批次中,Spark都会对所有现有密钥应用状态更新功能,而不管它们是否在批次中具有新数据。如果更新函数返回,None将删除键值对。让我们用一个例子来说明。假设要保持在文本数据流中看到的每个单词的连续计数。此处,运行计数是状态原创 2020-06-20 11:32:41 · 1755 阅读 · 0 评论 -
Spark2.x之SQL/join关联报CROSS JOIN错误
一.算子join在Spark中,两个dataframe关联分为使用算子join关联和使用视图SQL关联两种。在使用join算子关联时,一般的关联语句是这样的:words_df.join(words_df, words_df("word") === words_df("word")).show()words_df.join(words_df, words_df("word") === words_df("word"), joinType = "left").show()效果:当没有明确的关联字段原创 2020-06-18 20:38:15 · 2160 阅读 · 1 评论 -
Flink预定义时间戳提取器/水印发射器
一.简介Flink提供了抽象,允许程序员分配自己的时间戳并发出自己的水印。更具体地说,根据使用情况,可以通过实现AssignerWithPeriodicWatermarks和AssignerWithPunctuatedWatermarks接口之一来实现。简而言之,第一个将定期发出水印,而第二个则根据传入记录的某些属性发出水印,例如,每当流中遇到特殊元素时。为了进一步简化此类任务的编程工作,Flink附带了一些预先实现的时间戳分配器。二.时间戳递增的分配器定期生成水印的最简单的特殊情况是给定源任务看到原创 2020-06-16 17:32:52 · 444 阅读 · 0 评论 -
Kafka启动异常之InconsistentClusterIdException
一.场景kafka集群一般都是部署在zookeeper集群之上的,当Kafka出现异常时,强行关闭kafka集群或zookeeper集群时,重新启动时经常会出现异常InconsistentClusterIdException。二.异常信息ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)kafka.common.InconsistentClusterIdExcepti原创 2020-06-15 14:24:44 · 6790 阅读 · 5 评论 -
Flink生成时间戳/水印
一.概述生成时间戳/水印与在事件时间有关。有关事件时间, 处理时间和摄取时间,参考:事件时间概述为了处理事件时间,流式传输程序需要相应地设置时间特征。val env = StreamExecutionEnvironment.getExecutionEnvironmentenv.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)二.分配时间戳为了使用事件时间,Flink需要知道事件的时间戳,这意味着流中的每个元素都需要分配其事件时间原创 2020-06-12 18:53:56 · 2958 阅读 · 0 评论