![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spark
Lu_Xiao_Yue
这个作者很懒,什么都没留下…
展开
-
pyspark数据保存报错
an error occurred while calling o105 savaAsTable; unable to infer schema for orc. it must be specified manually.;原创 2022-04-25 08:52:09 · 1134 阅读 · 0 评论 -
【spark sql mapjoin BROADCAST】
在hive中开启mapjoin(大表join小表)直接在sql查询时添加参数/+ mapjoin(smalltable)/具体如下-- hive sqlselect /*+ mapjoin(b)*/ a.*from big_table ajoin small_table bon a.id=b.id在spark的sql中开启mapjoin / BROADCAST-- spark sqlselect /*+ BROADCAST(b)*/ a.*from big_table a原创 2022-04-06 14:43:19 · 1796 阅读 · 1 评论 -
pyspark 使用广播变量进行大表和小表join
pyspark 大表和小表join,使用广播变量,并对广播变量更新from pyspark import SparkConf, SparkContext, SQLContext# import org.apache.spark.sql.functions.broadcast# 给定节点,根据其信息进行扩展,找到各个层级扩展的节点。# df_edges_all:全部的交易关系(边)[source,target,xxx,xx],loop_nodes:[nodes],loop_num :循环次数, sq原创 2021-08-18 18:10:19 · 1507 阅读 · 0 评论 -
Spark序列化问题
本文主要从以下三个方面解释Spark 应用中序列化问题 。1、Java序列化含义。2、Spark代码为什么需要序列化。3、如何解决Spark序列化问题。1、Java序列化含义。Spark是基于JVM运行的进行,其序列化必然遵守Java的序列化规则。序列化就是指将一个对象转化为二进制的byte流(注意,不是bit流),然后以文件的方式进行保存或通过网络传输,等待被反序列化读取出来。序列化...转载 2018-11-26 20:44:52 · 218 阅读 · 0 评论 -
RDD使用编程接口方式转换为DataFrame的工具类(针对字段特别多的)
在使用Spark-Sql 时,需要把RDD类型转换为DataFrame,再使用一些SQL操作,在转换为DataFrame时有两种方式一种是通过反射方式,一种是通过编程接口方式编程接口的方式比较常用,但是这种方式代码量可能比较大,特别是在你的字段特别多的时候,你需要先把RDD中的类型转换为Row,还有根据每个字段的不同对其进行类型转换,还要再创建元数据构建StructType,特别的麻烦,因此我就...原创 2018-11-24 19:56:49 · 246 阅读 · 0 评论 -
spark求共同好友
使用spark求共同好友:在做一些项目时,又时可能遇到一些类似与求共同好友的要求,可以根据共同好友进行推荐添加好友,就比如说A和B的好友有M,K,O,L,那么有可能A和B就是也认识,所以可以把B推荐给A,下面是用Spark求共同好友的实现数据格式如下A:B,D,E,H,I,OB:A,C,E,KC:F,A,D,ID:A,E,F,LE:B,C,D,M,LF:B,C,D,E,O,M...原创 2018-11-25 21:06:23 · 591 阅读 · 2 评论 -
Spark GraphX入门
图计算入门级程序先看这个图,3和5之间有关系,3和7之间有关系,5和之间有关系,7和1之间有关系,5和2之间有关系,所以这就像是一个关系网,他们两两之间可能都有关系绿色的线,8和9有关系,10和8有关系,那么可能是9和10之间也存在关系一个简单的例子import org.apache.log4j.{Level, Logger}import org.apache.spark.graphx...原创 2018-11-23 11:10:33 · 234 阅读 · 3 评论 -
Spark的WordCount到底产生了多少个RDD
在Spark的wordcount中,一共会产生几个RDD?很多人在面试的过程会被问到Spark的WordCount中一共会产生多少个RDD呢?答案是六个一个HadoopRDD四个MapPartitionsRDD一个ShuffleRDD下面根据源码进行分析,val lines : RDD[String] = sc.textFile("hdfs://hadoop01/wc/input"...原创 2018-11-17 20:06:18 · 625 阅读 · 0 评论 -
DataFrame和RDD之间的区别以及两者之间的相互转换
一、DataFrame和RDD之间的区别从下面的图中可以看出DataFrame和RDD的区别。RDD是分布式的 Java对象的集合,比如,RDD[Person]是以Person为类型参数,但是,Person类的内部结构对于RDD而言却是不可知的。DataFrame是一种以RDD为基础的分布式数据集,也就是分布式的Row对象的集合(每个Row对象代表一行记录),提供了详细的结构信息,也就是我们经常...原创 2018-11-17 18:00:59 · 2733 阅读 · 0 评论 -
TF-IDF学习
Tf-idf特征抽取:从原始数据中抽取特征Tf-idf:词频-逆向文件频率。是一种在文本挖掘中广泛使用的特征向量化方法,它可以提现一个文档中词语在语料库中的重要程度词语:用t表示文档:用d表示语料库:用D表示词频TF(t,d): 词语t在文档中出现的次数的频率, HashingTF 是一个Transformer,在文本处理中,接收词条的集合然后把这些集合转化成固定长度的特征向量。这个算...原创 2019-01-03 16:18:45 · 495 阅读 · 0 评论 -
scala中的迭代器【Iterator】
遇到一个坑,我在使用spark-core时,使用了foreachPartition方法,程序如下使用foreachPartition进行往redis中存值,对里面的Iterator使用了map方法,但是并没有存进去,换成foreach方法可以 val conf = new SparkConf().setAppName(this.getClass.getName).setMaster("loca...原创 2019-01-03 22:44:49 · 1098 阅读 · 3 评论 -
Kmeans算法聚类算法
聚类算法:KMEANS原理介绍一、 聚类介绍聚类分析是一个无监督学习过程,一般是用来对数据对象按照其特征属性进行分组,经常被应用在客户分群、欺诈检测、图像分析等领域。K-means应该是最有名并且最经常使用的聚类算法。二、 算法介绍KMeans算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇,然后按照平均法重新计算各个簇的质心,从而确定簇心,一直迭代,知道簇心...原创 2019-01-06 20:06:21 · 3396 阅读 · 0 评论 -
hive on spark编程
hive的底层实现是MapReduce,而hive on spark 是把底层执行替换成spark,速度会比使用 MapReduce快把这些文件 hive-site.xml, core-site.xml 和 hdfs-site.xml 放到 resource中maven依赖 <properties> <maven.compiler.source>1.7...原创 2019-01-12 20:15:50 · 265 阅读 · 0 评论 -
启动spark报错
再启动spark时报错:Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the “DBCP” plugin to create a ConnectionPool gave an error : The specified datastore driver (“com.mysql.jdbc.Driv...原创 2019-01-12 21:21:23 · 562 阅读 · 0 评论 -
spark的HashShuffleManager、SortShuffleManager、钨丝ShuffleManager
1、shuffle分类spark的shuffle机制可以分为3类,分别是HashShuffleManager、SortShuffleManager、tungsten-sortShuffleManager(钨丝ShuffleManager),下面对着几种shuffle机制进行详细的介绍2、HashShuffleManager普通的HashShuffleManagerHashShuffleMa...原创 2019-01-19 21:30:50 · 1195 阅读 · 0 评论 -
spark的shuffle过程
上一篇写了shuffle的几种机制, 这一篇就介绍一下shuffle拉去数据的过程和executor的内存管理1、map task处理完数据溢写到本地磁盘后,会将数据结果和落地磁盘文件的位置封装成MapStatus对象中,通过MapoutputTrackerWorker会向Driver端的MapoutputTrackerMaster,Driver端就掌握了磁盘小文件的位置。2、reduce t...原创 2019-01-20 13:07:28 · 557 阅读 · 0 评论 -
spark读写hbase中的数据
spark读取hbase中的数据import org.apache.hadoop.hbase.HBaseConfigurationimport org.apache.hadoop.hbase.client.Resultimport org.apache.hadoop.hbase.io.ImmutableBytesWritableimport org.apache.hadoop.hbase....原创 2019-01-25 10:08:17 · 289 阅读 · 0 评论 -
朴素贝叶斯算法,对男女分类
使用朴素贝叶斯算法进行男女分类训练模型,并进行保存原数据:maven 依赖&lt;dependencies&gt; &lt;!-- 导入spark sql的依赖 --&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.spark&原创 2019-01-15 15:58:09 · 1031 阅读 · 0 评论 -
使用百度开发者平台
使用百度地图开发者平台,通过调用接口,传入经纬度获取相应的位置1、首先先注册一个账号https://lbsyun.baidu.com/2、点击创建应用,然后一个应用有一个AK,和SK附录上有API开发文档3、代码package utilsimport java.io.UnsupportedEncodingExceptionimport java.net.URLEncoder...原创 2018-11-22 20:11:17 · 2289 阅读 · 2 评论 -
SparkSQL把rdd转化为DataFrame时,想要把整个数组的值都放到Row中则么办?
在使用sparkSQL,有时想要把rdd中的数据转换成DataFrame,RDD中的的数据可能时Array类型,或者是想要把数组类型中的所有元素放到Row中,当数组中的元素特别多时,可能就会变得更加麻烦,其实Row的Object中为我们提供了一个很好的方法,就是merge方法,话不多说,直接看代码吧Object Demo {def main(args: Array[String]): Un...原创 2018-11-19 22:56:45 · 5576 阅读 · 3 评论 -
SparkStreaming与kafka通过直连方式读取数据
package day01.Dirctorimport kafka.common.TopicAndPartitionimport kafka.message.MessageAndMetadataimport kafka.serializer.StringDecoderimport kafka.utils.{ZKGroupTopicDirs, ZkUtils}import org.I0I...原创 2018-11-10 22:51:11 · 1127 阅读 · 0 评论 -
使用sparkStreaming与Kafka直连方式WordCount,使用redis存放中间结果
1、maven的pom.xml文件,添加jedis依赖&lt;!-- redis--&gt; &lt;dependency&gt; &lt;groupId&gt;redis.clients&lt;/groupId&gt; &lt;artifactId&gt;jedis&原创 2018-11-11 13:09:46 · 1248 阅读 · 1 评论 -
Kafka的简单介绍与使用,生产者和消费者的JavaApi
一、简介2、实时流数据管道,可以在3、构建流式引用4、是一个分布式流式处理平台, 统称消息队列或消息中间件,有生产者和消费者之分消费者去kafka中拉数据(而不是kafka给数据)其实kafka就是一个临时存储的插件,但是这个插件性能很强大kafka 是用scala编译的0.8版本的偏移量 可以自己管理,0.8版本用的很多高可用、高吞吐、多副本、容错、读写能力强三、kafka的组...原创 2018-11-11 13:18:54 · 550 阅读 · 0 评论 -
kafka的receive方式实现WordCount,使用updateStateByKey函数,累加所有批次的wordCount
Spark Streaming的updateStateByKey可以把DStream中的数据按key做reduce操作,然后对各个批次的数据进行累加。注意wordDstream.updateStateByKey[Int]每次传递给updateFunc函数两个参数,其中,1、第一个参数是某个key(即某个单词)的当前批次的一系列值的列表(Seq[Int]形式),updateFunc函数中 val...原创 2018-11-11 13:36:43 · 636 阅读 · 0 评论 -
总结常用的Transformation算子和Action算子,及基本用法
只有是Action时,才会执行立即操作。 Transformation是 lazy的操作,不会立即执行,执行Transformation的算子时,会返回一个新的RDD,依赖上一个RDDtransformation:1、sortBy : 对于RDD的是非元组型,rdd1.soreBy(x=>x),元组型按value排序rdd.soreBy(_._2)(进行shuffle)2、sor...原创 2018-11-11 14:00:24 · 2329 阅读 · 0 评论 -
Spark中的3中Join
Broadcast Join大家知道,在数据库的常见模型中(比如星型模型或者雪花模型),表一般分为两种:事实表和维度表。维度表一般指固定的、变动较少的表,例如联系人、物品种类等,一般数据有限。而事实表一般记录流水,比如销售清单等,通常随着时间的增长不断膨胀。因为Join操作是对两个表中key值相同的记录进行连接,在SparkSQL中,对两个表做Join最直接的方式是先根据key分区,再在每个分...转载 2018-11-11 14:06:25 · 358 阅读 · 0 评论 -
SparkSQL之自定义函数UDF和UDAF
SparkSQL中有两种自定函数,在我们使用自带的函数时无法满足自己的需求时,可以使用自定义函数,SparkSQL中有两种自定义函数,一种是UDF,另一种是UDAF,和Hive 很类似,但是hive中还有UDTF,一进多出,但是sparkSQL中没有,这是因为spark中用 flatMap这个函数,可以实现和udtf相同的功能UDF函数是针对的是一进一出UDAF针对的是多进一出udf很简单,...原创 2018-11-11 14:29:44 · 497 阅读 · 0 评论 -
spark 累加历史 + 统计全部 + 行转列
转载自https://www.cnblogs.com/piaolingzxh/p/5538783.html感觉写的特别好,特别有用spark 累加历史主要用到了窗口函数,而进行全部统计,则需要用到rollup函数1 应用场景:1、我们需要统计用户的总使用时长(累加历史)2、前台展现页面需要对多个维度进行查询,如:产品、地区等等3、需要展现的表格头如: 产品、2015-04、2015-...转载 2018-11-11 21:27:03 · 1548 阅读 · 0 评论 -
SparkStreaming直连方式读取kafka数据,使用MySQL保存偏移量
通过MySQL保存kafka的偏移量,完成直连方式读取数据使用scalikeJDBC,访问数据库1、什么是 ScalikeJDBCScalikeJDBC 是一款给 Scala 开发者使用的简洁 DB 访问类库,它是基于 SQL 的,使用者只需要关注 SQL 逻辑的编写,所有的数据库操作都交给 ScalikeJDBC。这个类库内置包含了JDBC API,并且给用户提供了简单易用并且非常灵活的 ...原创 2018-11-15 20:02:24 · 5002 阅读 · 4 评论 -
使用IO流模拟Kafka生产者生产数据
java代码使用IO流模拟生产者生产数据import kafka.javaapi.producer.Producer;import kafka.producer.KeyedMessage;import kafka.producer.ProducerConfig;import java.io.BufferedReader;import java.io.FileNotFoundExcept...原创 2018-11-15 21:05:43 · 588 阅读 · 0 评论 -
spark的JDBC连接池(Scala版),及wordCount的结果保存到MySql中
一个Scala版的连接池,并在使用Spark Streaming进行Word Count时,把每批数据都存到mySql中import java.sql.{Connection, DriverManager}import java.utilobject JDBCConnectePools02 { private val max = 10 //设置连接最大数 private val ...原创 2018-11-12 20:07:57 · 5495 阅读 · 4 评论 -
kafka直连方式,使用redis保存偏移量
使用Redis来记录偏移量,以前用receive方式时,使用zookeeper保存偏移量,不用自己保存偏移量,使用直连方式可以自己保存偏移量,更加灵活。在直连方式中,保存偏移量可以使用zookeeper,也可以使用mysql、redis等来保存偏移量,下面使用一种简单的方式用reids来保存偏移量package day03.KafkaDricteimport java.{lang, util...原创 2018-11-14 20:05:12 · 2839 阅读 · 6 评论 -
kafka直连方式消费多个topic
一个消费者组可以消费多个topic,以前写过一篇一个消费者消费一个topic的,这次的是一个消费者组通过直连方式消费多个topic,做了小测试,结果是正确的,通过查看zookeeper的客户端,zookeeper记录了偏移量package day04/*消费多个topic */import kafka.common.TopicAndPartitionimport kafka.mess...原创 2018-11-14 22:48:34 · 15279 阅读 · 10 评论 -
srotByKey为什么会触发job
大家都只知道srotByKey是一个transformation算子,而transformation类型的算子是不触发Job的,但是有心的人会注意到,在我们调用sortByKey这个算子时 ,可以从UI界面看到,sortByKey竟然会触发Job其实sortByKey 在执行时会对分区中的数据进行取样,把取样的数据再进行收集(collect),那么此时就会触发一个Job,具体的原因可以往下看源码...原创 2018-11-20 20:20:38 · 490 阅读 · 2 评论 -
在Scala中使用fastJson 解析json字符串
一、阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser。包括自称最快的JackJson;功能强大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自省;无依赖;二、在Scala中使用 也可使用fastJson 解析jso...原创 2018-11-16 22:34:36 · 13053 阅读 · 1 评论 -
Spark调优之JVM调优
**JVM调优**堆内存存放我们创建的一些对象,有老年代和年轻代。理想情况下,老年代都是放一些生命周期很长的对象,数量应该是很少的,比如数据库连接池。我们在spark task执行算子函数(我们自己写的),可能会创建很多对象,这些对象都是要放入JVM年轻代中的。每一次放对象的时候,都是放入eden区域,和其中一个survivor区域。另外一个survivor区域是空闲的。当eden区域和...原创 2018-11-16 22:48:08 · 333 阅读 · 0 评论 -
Scala中当参数超过22时,通过实现Product特质
在使用Spark做某些项目时,可能对某写数据进行分析时,会出现有很多字段,而Scala中,默认的最大的参数个数是22,因此如果当我们的字段太多时 ,22字段不能满足,我们可以同过实现Product这个特质,实现里面的方法,可以传更多的字段object Demo01 { def main(args: Array[String]): Unit = { val Stu = new Stu(...原创 2018-11-19 22:28:58 · 3023 阅读 · 1 评论 -
什么是宽窄依赖,及特殊join算子,join时何时产生shuffle,何时不产生shuffle
Spark中产生宽窄依赖的依据是shuffle,当发生shuffle时,会产生宽依赖,基本上shuffle算子都会产生宽依赖,但是join除外,在执行join算子之前如果先执行groupByKey,执行groupByKey之后,会把相同的key分到同一个分区,再执行join算子,join算子是把key相同的进行join(只是对于k v形式的数据可以使用),不一定会产生shuffle最后返回的结...原创 2018-11-10 13:53:55 · 2784 阅读 · 2 评论