首页 > 其他分享 >Spark StructStreaming 流计算中的数据关联

Spark StructStreaming 流计算中的数据关联

时间:2024-08-06 16:00:10浏览次数:14  
标签:Join 离线 用户 关联 流批 Spark 数据 StructStreaming

Spark StructStreaming 流计算中的数据关联

在上一讲,我们提到,Structured Streaming 会复用 Spark SQL 所提供的一切数据处理能力,比如数据抽取、过滤、分组聚合、关联、排序,等等。不过,在这些常规的数据处理类型中,有一类操作需要我们特别关注,它就是数据关联(Joins)。

这主要是出于两方面的原因,一来,数据关联的应用非常普遍,可以说是数据应用中“出场率”最高的操作类型之一;再者,与批处理中的数据关联不同,流计算中的数据关联,还需要考虑到流处理过程中固有的一些限制,比如说时间窗口、数据延迟容忍度、输出模式,等等。

因此,今天这一讲,我们专门来说一说 Structured Streaming 中的数据关联。我们先盘点好 Structured Streaming 的技能树,看看它都支持哪些种类的数据关联。之后再用一个短视频推荐的例子上手试验一下,总结出不同类型数据关联的适用场景以及注意事项。

流计算中的数据关联

我们知道,如果按照关联形式来划分的话,数据关联可以分为 Inner Join、Left Join、Right Join、Semi Join、Anti Join,等等。如果按照实现方式来划分的话,可以分为 Nested Loop Join、Sort Merge Join 和 Hash Join。而如果考虑分布式环境下数据分发模式的话,Join 又可以分为 Shuffle Join 和 Broadcast Join

而在流计算的场景下,按照数据来源的不同,数据关联又可以分为“流批关联”与“双流关联”。所谓“流批关联”(Stream-Static Join),它指的是,参与关联的一张表,来自离线批数据,而另一张表的来源,是实时的数据流。换句话说,动态的实时数据流可以与静态的离线数据关联在一起,为我们提供多角度的数据洞察。

而“双流关联”(Stream-Stream Join),顾名思义,它的含义是,参与关联的两张表,都来自于不同的数据流,属于动态数据与动态数据之间的关联计算,如下图所示。

image-20211219090246191

显然,相对于关联形式、实现方式和分发模式,数据来源的分类标准与前三者也是相互正交的。我们知道,基于前 3 种分类标准,数据关联已经被划分得足够细致。再加上一种正交的分类标准,数据关联的划分,只会变得更为精细。

更让人头疼的是,在 Structured Streaming 流计算框架下,“流批关联”与“双流关联”,对于不同的关联形式,有着不同的支持与限制。而这,也是我们需要特别关注流处理中数据关联的原因之一。

接下来,我们就分别对“流批关联”和“双流关联”进行展开,说一说它们支持的功能与特性,以及可能存在的限制。本着由简入难的原则,我们先来介绍“流批关联”,然后再去说“双流关联”。

流批关联

为了更好地说明流批关联,咱们不妨从一个实际场景入手。在短视频流行的当下,推荐引擎扮演着极其重要的角色,而要想达到最佳的推荐效果,推荐引擎必须依赖用户的实时反馈。

所谓实时反馈,其实就是我们习以为常的点赞、评论、转发等互动行为,不过,这里需要突出的,是一个“实时性”、或者说“及时性”。毕竟,在选择越来越多的今天,用户的兴趣与偏好,也在随着时间而迁移、变化,捕捉用户最近一段时间的兴趣爱好更加重要。

假设,现在我们需要把离线的用户属性和实时的用户反馈相关联,从而建立用户特征向量。显然,在这个特征向量中,我们既想包含用户自身的属性字段,如年龄、性别、教育背景、职业,等等,更想包含用户的实时互动信息,比如 1 小时内的点赞数量、转发数量,等等,从而对用户进行更为全面的刻画。

假设,现在我们需要把离线的用户属性和实时的用户反馈相关联,从而建立用户特征向量。显然,在这个特征向量中,我们既想包含用户自身的属性字段,如年龄、性别、教育背景、职业,等等,更想包含用户的实时互动信息,比如 1 小时内的点赞数量、转发数量,等等,从而对用户进行更为全面的刻画。

一般来说,实时反馈来自线上的数据流,而用户属性这类数据,往往存储在离线数据仓库或是分布式文件系统。因此,用户实时反馈与用户属性信息的关联,正是典型的流批关联场景。

那么,针对刚刚说的短视频场景,我们该如何把离线用户属性与线上用户反馈“合二为一”呢?为了演示流批关联的过程与用法,咱们自然需要事先把离线数据与线

标签:Join,离线,用户,关联,流批,Spark,数据,StructStreaming
From: https://blog.csdn.net/2401_84052244/article/details/140955783

相关文章

  • Spark StructStreaming Window和Watermark
    SparkStructStreamingWindow和Watermark前面我们介绍了tructuredStreaming的计算模型与容错机制。深入理解这些基本原理,会帮我们开发流处理应用打下坚实的基础。在“流动的WordCount”那一讲,我们演示了在StructuredStreaming框架下,如何做流处理开发的一般流程。......
  • 了解 Databricks 文件系统 (DBFS) 中的文件访问与使用 Python 和 Spark 的卷的比较
    我当前正在尝试从Databricks文件系统(DBFS)读取和显示文件,但遇到了问题。这是我使用的代码:file_path="/dbfs/cluster-logs/use_case/default_job_cluster/cluster_id/init_scripts/cluster_id/20240801_proxy-init.sh.stderr.log"withopen(file_path,'r')asfile:......
  • 解决windows报错:该文件没有与之关联的应用来执行该操作
    报错截图:解决方案1、新建txt文件2、复制内容到txt文件taskkill/f/imexplorer.exeregadd"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIcons"/v29/d"C:\Windows\system32\imageres.dll,154"/treg_sz/fregadd......
  • 【YashanDB数据库】自关联外键插入数据时报错:YAS-02033 foreign key constraint viola
    问题现象使用如下的sql语句创建自关联外键表:droptableself_f_key;createtableself_f_key(t1numberprimarykeynotnull,t2number);createindexi_s_1onself_f_key(t2);altertableself_f_keyaddconstraintc_0001foreignkey(t2)referencesself_f_key(t1);......
  • 【Spark计算引擎----第二篇(RDD):一篇文章带你清楚什么是RDD?RDD的概念,RDD的特性,怎么创建
    前言:......
  • 优化 PySpark 代码:在保持功能的同时避免 For 循环并减少
    frompyspark.sqlimportWindowfrompyspark.sqlimportfunctionsasFimportfunctoolsfromdatetimeimportdatetimedefgenerate_new_rating_data(w_df,count_a,distinct_a,flag_a,suffix):ifflag_a:w_df=w_df.where((w_df[f&qu......
  • Spark MLlib模型—决策树系列算法
    文章目录SparkMLlib模型—决策树系列算法决策树系列算法随机森林(RandomForest)GBDT(Gradient-boostedDecisionTrees)总结SparkMLlib模型—决策树系列算法前面我们重点介绍了机器学习中的特征工程,以及SparkMLlib框架支持的特征处理函数。基于线......
  • 灰色关联分析
    文章目录概述分析步骤1.数据收集与预处理2.数据标准化处理3.确定参考数列和比较数列4.计算灰色关联度5.计算关联度6.结果分析与评价应用实例结论在复杂的数据分析过程中,我们经常遇到数据不完整或带有不确定性的情况。灰色关联分析作为一种解决这类问题的强有力......
  • Android开发 - (适配器)ArrayObjectAdapter类与Presenter实现类关联的作用解析
    ListRowPresenterArrayObjectAdapteradapter=newArrayObjectAdapter(newListRowPresenter());用途:用于展示ListRow中的水平滚动列表项ImageCardViewPresenterArrayObjectAdapteradapter=newArrayObjectAdapter(newImageCardViewPresenter());用途:用于显示带......
  • Spark
    Sparkcorespark作业执行的特点*spark作业执行的特点:*1、只有遇到行动算子的时候,整个spark作业才会被触发执行*2、遇到几次,执行几次算子RDDRDD:弹性分布式数据集*弹性:数据量可大可小*RDD类似于容器,但是本身存储的不是数据,是计算逻辑*当遇到行动算子的时候,整个sp......