Apache Spark机器学习.2.5 数据集连接

简介:

2.5 数据集连接


本节,我们将介绍数据连接的技术,并讨论Spark处理数据连接的特有的特征,以及一些使工作更容易进行的数据连接解决方案。

学习完本节,我们将有能力按照各类机器学习需要做数据连接。

2.5.1 数据连接及其工具——Spark SQL

为机器学习项目准备数据集时,我们一般需要组合多个数据集。关系表通过主键和外键进行连接。

连接两个及以上的数据集听起来容易,但做起来非常有挑战,并且非常耗时。在SQL语句中,SELECT是最常用的命令。作为例子,下面是一个执行连接的典型的SQL代码:

 

为执行上面提到的表连接任务,数据科学家和机器学习从业者经常使用他们熟悉的SQL工具。在Spark环境中,Spark SQL就是为此开发的工具。

Spark SQL能够让用户在Spark开发环境中使用SQL或 DataFrame API查询结构化数据,这些在R notebook中依然可以使用。Spark SQL重用了Hive的前端和元数据,与Hive数据和查询完全兼容。

Spark SQL包含一个基于成本的优化器、列存储和代码生成器以生成快速的查询。同时,Spark SQL使用Spark引擎将查询扩展到几千个节点并耗费多个小时,它支持查询过程中的容错机制。

使用Spark SQL时,有两个主要的组件:DataFrame和SQLContext。

正如前面讨论的,DataFrame是一个组织成列的分布式数据集。它基于R语言的数据框,并与关系数据库的数据表类似。Spark SQL通过SQLContext封装了所有关系函数。

2.5.2 Spark中的数据集连接

这里,我们通过一些实例展示使用Spark SQL的方法和相关过程。

为便于分析,设想应用程序包含下面的4个数据表:

 

至少,我们需要将User和Events两个表连接起来,使用下面的代码完成连接:

 

Spark SQL的结果以RDD的形式存储,与Spark其他库交互比较少。上面返回的结果可以直接用于机器学习。

从上面的例子看到,Spark SQL使得为机器学习算法准备数据而进行的不同数据集连接非常方便。进一步讲,Spark SQL允许开发者简便地操作和连接机器学习算法的输出结果,从而生成想要的结果。

更多关于Spark SQL使用的信息,请访问:http://spark.apache.org/docs/1.0.0/sql-programming-guide.html。

2.5.3 使用R语言数据表程序包进行数据连接

相比以前,Spark已经使得数据操作更快、数据分析更容易了。

根据Spark开发团队的初衷,开发Spark SQL的目的是为了:

编写少量的代码

读取少量的数据

将一些困难的工作交给优化器完成

这都是通过使用DataFrame和Spark SQL命令sqlContext.read和 df.write实现的。

除了Spark SQL,data.table程序包功能非常强大,用户也可以使用R语言连接表。开发data.table程序包的主要目的是:

快速合并大量的数据(例如:内存中数据100GB),快速的排序连接

在不使用复制命令的情况下,按组快速增加/修改/删除列数据

按列进行数据表和快速的文件读取(fread)

该程序包为开发人员提供了自然和灵活的语法。

使用data.table进行连接,你首先需要创建data.frame,这非常容易。然后,使用X[Y]连接两个表。

这被称为末次观测值结转(Last Observation Carried Forward,LOCF) 或滚动连接。

X[Y]是data.table X和data.table Y 两个表之间的连接。如果Y有两列,第一列与X的第一列的key匹配,两个表的第二列也互相匹配。默认情况下执行equi-join,也就是值必须相等。

除了等值连接,还有滚动连接:

 

如前所述,Y的第一列与X的第一列匹配,也就是值相等。然而,Y中的最后一个连接列,即例子中的第二列,被特殊处理。在第一列匹配的情况下,如果未找到匹配项,将返回上一行的值。

其他控制包括:前滚、后滚、回滚至最近项和限时滚动。

在提示符下,输入下面的命令查看例子。

 

R语言data.table提供了增强版data.frame,包括:

快速合并大量数据——例如,100GB(查看一下高达20亿行的测试基准)。

快速的排序连接——例如,前滚、后滚、回滚至最近项和限时滚动。

快速的重叠范围连接——例如,GenomicRanges。

在2.2.3节,为便于分析我们给出了4个表:

 

在这个例子中,上一节我们获取了第一个数据的一个子集,然后与第四个数据汇集。现在,将它们连接在一起。如上一节,在R notebook上混合使用Spark SQL 和R语言,使数据连接更容易。

相关文章
|
8天前
|
机器学习/深度学习 分布式计算 大数据
阿里云 EMR Serverless Spark 在微财机器学习场景下的应用
面对机器学习场景下的训练瓶颈,微财选择基于阿里云 EMR Serverless Spark 建立数据平台。通过 EMR Serverless Spark,微财突破了单机训练使用的数据规模瓶颈,大幅提升了训练效率,解决了存算分离架构下 Shuffle 稳定性和性能困扰,为智能风控等业务提供了强有力的技术支撑。
|
3月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
193 6
|
3月前
|
机器学习/深度学习 算法 PyTorch
用Python实现简单机器学习模型:以鸢尾花数据集为例
用Python实现简单机器学习模型:以鸢尾花数据集为例
225 1
|
4月前
|
分布式计算 大数据 Apache
利用.NET进行大数据处理:Apache Spark与.NET for Apache Spark
【10月更文挑战第15天】随着大数据成为企业决策和技术创新的关键驱动力,Apache Spark作为高效的大数据处理引擎,广受青睐。然而,.NET开发者面临使用Spark的门槛。本文介绍.NET for Apache Spark,展示如何通过C#和F#等.NET语言,结合Spark的强大功能进行大数据处理,简化开发流程并提升效率。示例代码演示了读取CSV文件及统计分析的基本操作,突显了.NET for Apache Spark的易用性和强大功能。
122 1
|
4月前
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
741 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
6月前
|
UED 存储 数据管理
深度解析 Uno Platform 离线状态处理技巧:从网络检测到本地存储同步,全方位提升跨平台应用在无网环境下的用户体验与数据管理策略
【8月更文挑战第31天】处理离线状态下的用户体验是现代应用开发的关键。本文通过在线笔记应用案例,介绍如何使用 Uno Platform 优雅地应对离线状态。首先,利用 `NetworkInformation` 类检测网络状态;其次,使用 SQLite 实现离线存储;然后,在网络恢复时同步数据;最后,通过 UI 反馈提升用户体验。
148 0
|
6月前
|
机器学习/深度学习 TensorFlow 数据处理
分布式训练在TensorFlow中的全面应用指南:掌握多机多卡配置与实践技巧,让大规模数据集训练变得轻而易举,大幅提升模型训练效率与性能
【8月更文挑战第31天】本文详细介绍了如何在Tensorflow中实现多机多卡的分布式训练,涵盖环境配置、模型定义、数据处理及训练执行等关键环节。通过具体示例代码,展示了使用`MultiWorkerMirroredStrategy`进行分布式训练的过程,帮助读者更好地应对大规模数据集与复杂模型带来的挑战,提升训练效率。
161 0
|
6月前
|
消息中间件 前端开发 Kafka
【Azure 事件中心】使用Apache Flink 连接 Event Hubs 出错 Kafka error: No resolvable bootstrap urls
【Azure 事件中心】使用Apache Flink 连接 Event Hubs 出错 Kafka error: No resolvable bootstrap urls
101 2
|
6月前
|
消息中间件 Java Kafka
【Azure 事件中心】开启 Apache Flink 制造者 Producer 示例代码中的日志输出 (连接 Azure Event Hub Kafka 终结点)
【Azure 事件中心】开启 Apache Flink 制造者 Producer 示例代码中的日志输出 (连接 Azure Event Hub Kafka 终结点)
|
6月前
|
分布式计算 Hadoop 大数据
大数据处理框架在零售业的应用:Apache Hadoop与Apache Spark
【8月更文挑战第20天】Apache Hadoop和Apache Spark为处理海量零售户数据提供了强大的支持
107 0

推荐镜像

更多