spark
文章平均质量分 66
bitcarmanlee
这个作者很懒,什么都没留下…
展开
-
spark创建空dataframe
源码中已经很明确告诉我们,emptyDataFrame创建了一个不含任何行列且schema为空的dataframe。项目中会需要用到创建空的dataframe。spark提供了emptyDataFrame方法,可以直接创建。错误信息也很直观,emptydf是0 columns,df是2 columns,所以无法直接union。为了解决上面的问题,我们需要在生成emptyDataFrame的时候指定schema。这个空的dataframe在实际中用途有限,比如如下场景。上面的方法运行时候直接抛出错误信息。原创 2023-03-23 14:11:33 · 653 阅读 · 2 评论 -
RDD, DataFrame,DataSet区别与相互转化
它提供了特定领域内专用的 API 来处理你的分布式数据,并让更多的人可以更方便地使用 Spark,而不仅限于专业的数据工程师。从根本上来说,一个 RDD 就是你的数据的一个不可变的分布式元素集合,在集群中跨节点分布,可以通过若干提供了转换和处理的底层 API 进行并行处理。3.如果你想在编译时就有高度的类型安全,想要有类型的 JVM 对象,用上 Catalyst 优化,并得益于 Tungsten 生成的高效代码,那就使用 Dataset;1.你希望可以对你的数据集进行最基本的转换、处理和控制;原创 2023-02-06 12:10:56 · 1051 阅读 · 0 评论 -
生成2023年节假日/工作日维表
项目中有一张维表,维护的是历史节假日工作日的信息,估计在很多场合都有类似的需求。到了新年,需要生成新一年的数据,下面看看如何在维表中插入新一年的数据。原创 2023-01-17 16:57:24 · 1440 阅读 · 4 评论 -
parquet-tools用法详解
因为是压缩格式,我们无法直接查看parquet文件里的数据,这个时候parquet-tools就给我们提供了一个方便的途径对parquet文件进行查看。从上面的输出可以看出来,meta参数输出的信息,比schema参数输出信息更详尽,可以看到数据的压缩方式,是否压缩,数据的null值数量,min/max值等。对于parquet文件,第一下我们可能需要了解的就是元信息,这个时候通过schema/meta参数就可以实现查看元信息。cat命令可以查看数据里面的内容,用法与linux系统中的cat用法类似。原创 2022-12-11 11:34:08 · 3822 阅读 · 3 评论 -
sql 计算两个日期差几天
有段时间没写sql,正好今天要处理个比较复杂的业务问题,需要写sql,里面碰到几个小点,还有点记得不是太清楚,稍微想了一阵才写出来,特此记录,方便后续查询。其中有一个环节,需要计算两个日期差几天,经过一番思考,可以按如下方式进行计算。原创 2022-11-18 17:45:55 · 8236 阅读 · 1 评论 -
spark 窗口函数(Window)实战详解
项目github地址:bitcarmanlee easy-algorithm-interview-and-practice欢迎大家star,留言,一起学习进步1.为什么需要窗口函数在1.4以前,Spark SQL支持两种类型的函数用来计算单个的返回值。第一种是内置函数或者UDF函数,他们将单个行中的值作为输入,并且他们为每个输入行生成单个返回值。另外一种是聚合函数,典型的是SUM, MAX, AVG这种,是对一组行数据进行操作,并且为每个组计算一个返回值。上面提到的两种函数,实际当中使用非常广泛,但原创 2021-02-03 20:20:52 · 8569 阅读 · 1 评论 -
spark java.lang.StackOverflowError
1.遇到的问题在实际分析数据过程中,需要拉取最近一年的数据进行统计,并且一年的数据按天分区。val ymdSet = TimeUtils.genYmdSet(beginYmd, endYmd) // 获取过去一年时间的日期var rdd = SparkIo.readThriftParquetFile(spark.sparkContext, pathxxx, classOf[xxx]) for(eachYmd <- ymdSet) { val tmppath = PathUtils.xxx原创 2020-12-09 18:45:19 · 1115 阅读 · 0 评论 -
spark sql select selectExpr简析
1.select方法dataframe的select方法,最简单的使用方式为直接选择对应的列名。测试数据如下101 brand1101 brand2101 brand3102 brand1102 brand3102 brand3102 brand4103 brand2103 brand2103 brand2103 brand5103 brand5 def parse() = { val sparkConf = new SparkConf().setMaster("l原创 2020-10-26 22:42:57 · 6886 阅读 · 2 评论 -
spark sql 给dataframe列重命名的三种方式
1.dataframe默认的列名spark sql去读取文本生成dataframe时,如果该文本没有自带schema信息,默认的列名为_c0, _c1这种形式,我们可以看个例子。数据如下101 brand1101 brand2101 brand3102 brand1102 brand3102 brand3102 brand4103 brand2103 brand2103 brand2103 brand5103 brand5如果我们读取上述的csv文本然后生成dataframe原创 2020-10-25 23:24:56 · 11836 阅读 · 4 评论 -
SparkStreaming kafka zookeeper本地环境调试安装
1.需求线上需要使用流式数据实时反馈CTR,因此想用spark streaming计算相关数据。之前一直没有在本地配置streaming的调试环境,因此在本地安装一下streaming的调试环境并记录。2.需要安装的组件spark streaming一般会接消息队列作为数据源,以kafka为例,所以需要在本地安装kafka。kafka又依赖zookeeper,所以还需要安装zookeeper。3. 安装zookeeper3.1 下载zk先去zookeeper官网下载zookeeper对应的.bi原创 2020-05-12 15:52:54 · 956 阅读 · 0 评论 -
Spark编程Tips
1.尽量用 aggregateByKey 和 ReduceByKey和CombineByKey, 替代 groupByKey。这个开发过程中深有体会,groupByKey极易引发各种OOM。。。2.repartition 适用于 RDD[V], partitionBy 适用于 RDD[K, V].3.尽量避免在一个 transformation 中处理所有的逻辑, 尽量分解成 map, filter原创 2017-12-13 18:12:42 · 434 阅读 · 0 评论 -
spark中的广播变量与累加器
1.累加器(accumulator)累加器是仅仅被相关操作累加的变量,因此可以在并行中被有效地支持。它可以被用来实现计数器和总和。 累加器通过对一个初始化了的变量v调用SparkContext.accumulator(v)来创建。在集群上运行的任务可以通过add或者”+=”方法在累加器上进行累加操作。但是,它们不能读取它的值。只有驱动程序能够读取它的值,通过累加器的value方法。 看看在spa原创 2017-11-25 22:09:01 · 2751 阅读 · 0 评论 -
spark 通过打散热点key解决数据倾斜问题
1.热点key的数据倾斜在大数据相关的统计与处理中,热点key造成的数据倾斜非常常见也非常讨厌,经常会造成job运行时间变长或者造成job的OOM最后导致任务失败。例如在wordcount任务中,如果有一个word是热点词,出现的次数很多,那么最后这个job的运行时间就是由这个热点词所在的task运行时间决定的。因此遇到这种热点问题,我们需要想办法改进代码,优化任务,提高最终的运行效率。2.实际ca原创 2017-12-22 16:06:11 · 3988 阅读 · 1 评论 -
java.lang.UnsupportedClassVersionError : Unsupported major.minor version 52.0
在spark-shell中,遇到了如下的错误:Caused by: java.lang.UnsupportedClassVersionError: xxx/xxx/xxx/xxx : Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.la原创 2018-01-11 16:30:21 · 2515 阅读 · 1 评论 -
SparkSQL简单教程
当面对一堆格式化的数据需要做一些统计分析的时候,awk是个非常不错的选择。但是当数据量上来以后,通过单机awk的方式处理就显得有些力不从心,这个时候我们可以通过SparkSQL来模拟sql的方式来处理这些海量数据,现在就给大家举个实例,看看怎么通过简单的几行代码用SparkSQL的方式来分析海量数据。1.原始数据在hdfs上有个路径为XXX,数据规模大概为100G左右,都是格式化的标准数据,每一行四原创 2017-12-28 09:32:19 · 2812 阅读 · 0 评论 -
Spark项目 error while loading <root>, error in opening zip file
IDE中的一个spark项目,从git上重新拉取代码以后,报了以下一堆错误:error: error while loading , error in opening zip file[ERROR] error: error while loading , error in opening zip fileerror: scala.reflect.internal.MissingReq原创 2018-01-26 11:53:10 · 1129 阅读 · 0 评论 -
spark 稀疏矩阵存储详细解读
spark mllib模块中,矩阵的表示位于org.apache.spark.mllib.linalg包的Matrices中。而Matrix的表示又分两种方式:dense与sparse。在实际场景应用场景中,因为大数据本身的稀疏性,sparse的方式比dense的方式使用更为频繁。而网络上大部分的资料对与sparse方式解释不是很清晰,本人也花了一些时间来理解,所以特此记录。1.稀疏矩阵的一些...原创 2018-05-24 14:59:29 · 3740 阅读 · 0 评论 -
Spark 按key聚合求平均值与占比
1.求key的平均值k,v结构的数据中,求每个key对应的平均值,在spark中怎么应该怎么求? 例如有如下的数据:("a",10)("b",4)("a",10)("b",20)想求a,b对应的平均值。 直接上代码sc.parallelize(List(("a",10),("b",4),("a",10),("b",2原创 2018-08-27 18:04:54 · 8482 阅读 · 0 评论 -
spark sortBy sortByKey实战详解
日常工作中,排序是道绕过不过去的侃,我们每天都会面对各种各样的排序需求。那么在spark中如何排序呢?我们来看一些很有代表性的例子。1.最简单的排序假设有个RDD[Int]类型的数据,需要按数据大小进行排序,那这个排序算最简单的:sc.parallelize(Array(1,3,2,4,6,5)).sortBy(x =&gt; x).collect()代码运行的结果: ...原创 2018-08-27 19:13:41 · 9045 阅读 · 0 评论 -
spark多字段排序与取topN
1.多字段排序前面介绍了[k,v]结构的rdd排序方法,下面来看更为复杂的情况,如果有更为复杂的多字段排序需求该怎么处理?比如有如下数据1 21 31 11 61 42 52 82 3我们现在想先对第一列逆序排,如果第一列相同再按第二列逆序排,该怎么办呢?以下两种方式都可以满足上面的需求1.1 定义SecondSortKey来实现首先我们定义一个SecondSortK...原创 2019-07-16 11:00:08 · 1881 阅读 · 1 评论 -
spark配置IntelliJ开发环境详解
1.花一天半时间配置spark开发环境RD同学开发代码肯定需要开发环境。为了配置好spark的本地开发测试环境,宝宝前后花了一天半的时间。各种踩坑各种无奈各种崩溃。文章以下内容都是宝宝一天半时间的实践吐血总结。绝对值得同学们学习收藏。2.大坑eclipse不适合spark因为宝宝之前一直用的是eclipse,所以自然想搭建eclipse+scala+maven+spark的开发测试环境。但是经过一天原创 2016-07-27 20:06:16 · 12587 阅读 · 0 评论 -
Spark 堆外内存
1.堆外内存有哪些前面提到spark中的堆内存溢出,除了堆内存,还有堆外内存。该部分内存主要用于程序的共享库、Perm Space、 线程Stack和一些Memory mapping等, 或者类C方式allocate object.堆外内存在Spark中可以从逻辑上分成两种: 一种是DirectMemory, 一种是JVM Overhead(下面统称为off heap), 这两者在Spark中的大小原创 2017-12-13 16:55:44 · 10883 阅读 · 0 评论 -
spark 两个rdd求交集,差集,并集
1.前言spark中两个rdd,经常需要做交集,差集,并集等操作。好比任何一门编程语言中两个集合,交并差也是常见的需求。现在我们看看在spark中怎么实现两个rdd的这种操作。 为了方便看到结果,在spark shell中测试如下代码。先生成两个rddscala> val rdd1 = sc.parallelize(List("a", "b","c"))rdd1: org.apache.spar原创 2017-11-24 22:58:50 · 37056 阅读 · 0 评论 -
Spark Heap OOM(堆内存溢出)
spark任务在调试过程中,OOM是非常讨厌的一种情况。本文针对Heap OOM的情况先做一定分析,告诉大家如何调参。1.Heap OOM的现象如果在Spark UI或者在spark.log中看到如下日志:java.lang.OutOfMemoryError: GC overhead limit exceededjava.lang.OutOfMemoryError: java heap space原创 2017-12-13 11:11:33 · 15633 阅读 · 2 评论 -
spark与hadoop对比
1.hadoop解决了什么问题Hadoop就是解决了大数据(大到一台计算机无法进行存储,一台计算机无法在要求的时间内进行处理)的可靠存储和处理。 HDFS,在由普通PC组成的集群上提供高可靠的文件存储,通过将块保存多个副本的办法解决服务器或硬盘坏掉的问题。 MapReduce,通过简单的Mapper和Reducer的抽象提供一个编程模型,可以在一个由几十台上百台的PC组成的不可靠集群上并发地,分原创 2016-11-05 22:10:09 · 9899 阅读 · 0 评论 -
spark wordcount 实例
spark集群搭建完毕以后,自然需要来测试一下。大数据领域的第一个程序自然就是wordcount了,就好像我们新接触一门编码语言,第一个程序就是hello world一样。接下来,我们就尝试用各种方式在spark里实现wordcount。1.准备数据首先准备一个简单文件aaa,然后put到hdfs上面:[root@namenodetest01 spark-1.6.0-bin-hadoop2.4]#原创 2016-07-21 18:18:35 · 7981 阅读 · 0 评论 -
Spark集群概述
1.概述Spark 的”集群”不是提供运算服务的,而是一种资源分配的调度器。 执行任务的 Spark 进程作为客户端向”集群”申请资源(运算节点), “集群”分配资源以后, 这个 Spark 进程会分解一些计算工作,并把他们放到这些申请来的资源中运行。提交给 Spark 执行的工作称做 application(应用),对应的主程序称作:driver program。 driver progra转载 2016-07-30 20:06:00 · 2555 阅读 · 0 评论 -
RDD,DataFrame与DataSet区别
1.RDD与DataFrame的区别 下面的图直观地体现了DataFrame和RDD的区别。左侧的RDD[Person]虽然以Person为类型参数,但Spark框架本身不了解Person类的内部结构。而右侧的DataFrame却提供了详细的结构信息,使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。DataFrame多了数据的结构信息,即schema。RDD是分转载 2016-07-29 14:45:26 · 4782 阅读 · 0 评论 -
spark MetaException(message:Version information not found in metastore. )
尝试将spark与hive结合起来。将相关配置完毕以后,启动spark-sql的过程中,出现了以下错误:16/07/25 17:19:08 WARN metadata.Hive: Failed to access metastore. This class should not accessed in runtime.org.apache.hadoop.hive.ql.metadata.HiveE原创 2016-07-25 17:29:01 · 7140 阅读 · 1 评论 -
spark sql 入门详解
1.spark sql简介spark sql是为了处理结构化数据的一个spark 模块。不同于spark rdd的基本API,spark sql接口更多关于数据结构本身与执行计划等更多信息。在spark内部,sql sql利用这些信息去更好地进行优化。有如下几种方式执行spark sql:SQL,DataFramesAPI与Datasets API。当相同的计算引擎被用来执行一个计算时,有不同的AP原创 2016-07-23 21:30:57 · 16764 阅读 · 0 评论 -
Spark与Pandas中DataFrame的详细对比
PandasSpark工作方式单机single machine tool,没有并行机制parallelism不支持Hadoop,处理大量数据有瓶颈分布式并行计算框架,内建并行机制parallelism,所有的数据和操作自动并行分布在各个集群结点上。以处理in-memory数据的方式处理distributed数据。支持Hadoop,能处理大量数据延迟机制not lazy-evaluat转载 2016-07-23 08:24:45 · 26410 阅读 · 1 评论 -
spark 集群搭建 详细步骤
最近好不容易搞到了三台测试机,可以用来搭建spark集群搞模型。本宝宝开心得不行,赶紧行动,把spark集群搭起来,模型跑起来。1.搭建hadoop集群hadoop的hdfs文件系统是整个生态圈的基础,因为数据量大了以后,数据一般就都放hdfs上头了。因为四台测试机之前已经搭建好了hadoop集群环境,而且经过本宝宝测试,hadoop集群也是可用的,所以就省了搭hadoop集群的功夫。2.配置集群h原创 2016-07-20 13:05:16 · 37412 阅读 · 3 评论 -
spark rdd详解一(rdd入门)
1.rdd简介与许多专有的大数据处理平台不同,Spark建立在统一抽象的RDD之上,使得它可以以基本一致的方式应对不同的大数据处理场景,包括MapReduce,Streaming,SQL,Machine Learning以及Graph等。这即Matei Zaharia所谓的“设计一个通用的编程抽象(Unified Programming Abstraction)。 RDD的全称为Resilient原创 2016-11-06 14:56:47 · 3373 阅读 · 0 评论 -
spark压缩和序列化相关
1.spark.serializer默认为org.apache.spark.serializer.JavaSerializer, 可选 org.apache.spark.serializer.KryoSerializer, 实际上只要是org.apache.spark.serializer的子类就可以了,不过如果只是应用,大概你不会自己去实现一个的。序列化对于spark应用的性能来说,还是有很大影响转载 2016-11-08 11:17:09 · 794 阅读 · 0 评论 -
spark rdd详解二(transformation与action操作)
sparkRdd transformationaction翻译 2016-11-06 16:15:53 · 3222 阅读 · 0 评论 -
Spark性能优化指南——高级篇
数据倾斜调优调优概述有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能。数据倾斜发生时的现象绝大多数task执行得都非常快,但个别task执行极慢。比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三个task却要一两个小时。转载 2017-11-13 22:15:50 · 635 阅读 · 0 评论 -
Spark性能优化指南——基础篇
1. 前言在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操作,应用范围与前景非常广泛。在美团•大众点评,已经有很多同学在各种项目中尝试使用Spark。大多数同学(包括笔者在内),最初开始尝试使用Spark的原因很简单,主要就是为了让大数据计算作业的执行速度更转载 2017-11-13 21:34:15 · 504 阅读 · 0 评论 -
spark aggregate函数详解
aggregate算是spark中比较常用的一个函数,理解起来会比较费劲一些,现在通过几个详细的例子带大家来着重理解一下aggregate的用法。1.先看看aggregate的函数签名在spark的源码中,可以看到aggregate函数的签名如下:def aggregate[U: ClassTag](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) =原创 2017-09-25 18:53:39 · 14260 阅读 · 1 评论 -
Spark2.1特征处理:提取/转换/选择
1.Feature Extractors(特征提取)1.1 TF-IDF词频(Term Frequency)- 逆向文档频率(Inverse Document Frequency) 是一种特征矢量化方法,广泛应用于文本挖掘,用以评估某一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。定义:t 表示由一个单词,d 表示一个文档,D 表示多个文档构成的语料库(corpus),词频 TF(t,d转载 2017-09-06 17:43:17 · 4390 阅读 · 0 评论 -
spark生成DataFrame
1.为什么要有DataFrameSpark中的RDD叫做分布式弹性数据集。RDD是一个粗粒度的分布式计算,用函数声明式的api就能完成分布式的计算,比如wordcount,在mapreduce要写比较冗长的代码,而在Spark中可以用一行代码搞定。 既然RDD这么简单方便,为什么还要搞出一个DataFrame来呢?DataFrame是借鉴了R与pandas众DataFrame的思想,是业界处理标准原创 2017-09-07 18:28:17 · 1924 阅读 · 0 评论