User协同过滤(基于Spark实现)

项目地址:https://github.com/ChanKamShing/UserCF_Spark.git 推荐系统的作业流程: 召回/match(推荐引擎)-> 物品候选集 -> 过滤 -> 排序 -> 策略(保证结果多样性) -&am...

2019-08-25 12:22:55

阅读数 17

评论数 0

User协同过滤(基于Python实现)

项目地址:https://github.com/ChanKamShing/UserCF_python.git 推荐系统的作业流程: 召回/match(推荐引擎)-> 物品候选集 -> 过滤 -> 排序 -> 策略(保证结果多样性) -&a...

2019-08-24 18:08:02

阅读数 27

评论数 0

Spark存储原理——数据写入过程

Spark数据的写入过程的入口点位doPutIterator方法。下面是一些方法的调用关系图: 在该方法中,根据数据是否缓存到内存中处理。如果不缓存到内存中,则调用BlockManager的putIterator方法直接存储到磁盘中;如果缓存到内存中,则先判断数据存储级别是否对数据进...

2019-08-19 09:41:55

阅读数 24

评论数 0

Flink的WaterMark,及demo实例

实际生产中,由于各种原因,导致事件创建时间与处理时间不一致,收集的规定对实时推荐有较大的影响。所以一般情况时选取创建时间,然后事先创建flink的时间窗口。但是问题来了,如何保证这个窗口的时间内所有事件都到齐了?这个时候就可以设置水位线(waterMark)。 概念:支持基于时间窗口操作,由于事...

2019-08-18 20:02:52

阅读数 16

评论数 0

Spark的TaskSetManager(任务管理器)的排序算法

Spark作业执行中,有一个步骤是给任务进行资源分配,实际上这些任务由一些任务管理器TaskSetManager负责管理,资源分配过程中,会先根据某种排序算法排好序,然后根据就近原则给任务进行资源分配。那么关于TaskSetManager的排序是根据哪个算法呢?现在就来介绍。 排序算法由...

2019-08-15 11:24:41

阅读数 22

评论数 0

SparkSql中,关于Hive表与Parquet文件的Schema转化兼容

从表Schema处理角度对比Hive和Parquet,两者主要的区别: Hive区分大小写,Parquet不区分大小写; Hive允许所有的列为空,而Parquet不允许所有列为空; 基于上述两点区别,在进行Hive metastore Parquet转换为SpqrkSql Parquet时,...

2019-08-10 17:52:41

阅读数 22

评论数 0

SparkSQL自定义强类型聚合函数

自定义强类型聚合函数跟自定义无类型聚合函数的操作类似,相对的,实现自定义强类型聚合函数则要继承org.apache.spark.sql.expressions.Aggregator。强类型的优点在于:其内部与特定数据集紧密结合,增强了紧密型、安全性,但由于其紧凑的特性,降低了适用性。 准备emp...

2019-08-08 22:24:33

阅读数 26

评论数 0

SparkSQL自定义无类型聚合函数

准备数据文件: Michael,3000 Andy,4500 Justin,3500 Betral,4000 一、定义自定义无类型聚合函数 想要自定义无类型聚合函数,那必须得继承org.spark.sql.expressions.UserDefinedAggregateFuncti...

2019-08-08 22:17:16

阅读数 32

评论数 0

RDD转DataFrame常用的两种方式

随着Spark1.4.x的更新,Spark提供更高阶的对象DataFrame,提供了比RDD更丰富的API操作,同时也支持RDD转DataFrame(下面简称“DF”),但是要注意,不是任意类型对象组成的RDD都可以转换成DF,,只有当组成RDD[T]的每一个T对象内部具有鲜明的字段结构时,才能隐...

2019-08-07 22:47:07

阅读数 20

评论数 0

Spark作业执行原理(六)——获取执行结果

对于Executor的计算结果,会根据结果的大小使用不同的处理策略: 计算结果在(0,128MB-200KB)区间内:通过Netty直接发送给Driver终端; 计算结果在[128MB, 1GB]区间内:将结果以taskId为编号存入到BlockManager中,然后通过Netty把编号发...

2019-08-05 15:03:27

阅读数 30

评论数 0

Spark作业执行原理(五)——执行任务

在Spark消息通信原理(三)(https://blog.csdn.net/weixin_39400271/article/details/97136007)中第(6)点提到过,Executor是任务执行的容器,executor接收到LaunchTask消息之后(其实是GoraseGrainedE...

2019-08-05 11:32:39

阅读数 26

评论数 0

Spark作业执行原理(四)——提交任务

首先熟悉一下该阶段的一些重要方法的调用关系图: 在上一篇提交调度阶段中,提到:当该阶段不存在父调度阶段时,就会调用DAGScheduler的submitMissingTasks方法。这个方法就是触发任务的提交。在方法中,会根据调度阶段Partition个数拆分对应的个数的任务,一个p...

2019-08-03 15:23:12

阅读数 26

评论数 0

Spark作业执行原理(三)——提交调度阶段

在上一篇划分调度阶段中的handleJobSubmitted方法中,提到finalStage的生成,在生成finalStage的同时,建立起所有Stage的依赖关系,然后通过finalStage生成一个作业实例,在该作业实例中按照顺序提交调度阶段进行执行,在执行过程中监听总线获取作业、阶段执行的情...

2019-08-01 18:09:28

阅读数 26

评论数 0

Spark作业执行原理(二)——划分调度阶段

Spark调度阶段的划分是由DAGScheduler实现,DAGScheduler会从最后一个RDD出发,根据RDD的lineage使用广度优先算法遍历整个依赖树(总共使用了两次,一次是遍历区分ResultStage范围;另一次则是遍历获取ShuffleMapStage划分依据,用来划分每个Shu...

2019-08-01 11:43:10

阅读数 26

评论数 0

提示
确定要删除当前文章?
取消 删除