Sql 阿帕奇·卡桑德拉和斯帕克

Sql 阿帕奇·卡桑德拉和斯帕克,sql,apache-spark,cassandra,Sql,Apache Spark,Cassandra,我是一名经验丰富的RDBMD开发人员和管理员。但我对阿帕奇·卡桑德拉和斯帕克还不熟悉。我学习了Cassandra的CQL,文档中说CQL不支持连接和子查询,因为它在Cassandra中效率太低,因为它具有分布式数据特性 因此,我得出结论,在分布式数据环境中,连接和子查询不受支持,因为它们会严重影响性能 但后来我学习了Spark,它也适用于分布式数据,但Spark支持所有SQL功能,包括连接和子查询。即使Spark不是数据库系统,因此甚至没有索引。。。所以,我的问题是Spark是如何支持分布式数据

我是一名经验丰富的RDBMD开发人员和管理员。但我对阿帕奇·卡桑德拉和斯帕克还不熟悉。我学习了Cassandra的CQL,文档中说CQL不支持连接和子查询,因为它在Cassandra中效率太低,因为它具有分布式数据特性

因此,我得出结论,在分布式数据环境中,连接和子查询不受支持,因为它们会严重影响性能

但后来我学习了Spark,它也适用于分布式数据,但Spark支持所有SQL功能,包括连接和子查询。即使Spark不是数据库系统,因此甚至没有索引。。。所以,我的问题是Spark是如何支持分布式数据上的连接和子查询的?它是否有效


提前谢谢

apachespark有一个在内存中创建的RDD(弹性分布式数据集)概念

它基本上是spark中的基本数据结构

连接、查询
是在这个RDD上执行的,因为它在
内存中运行
,这就是它非常高效的原因

请浏览下面的文档,了解弹性数据集的一些概念

http://spark.apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds
Spark完成了对分布式数据进行连接所需的“艰苦工作”。在实际执行联接之前,它会执行大的无序排列以对齐键上的数据。这基本上意味着任何连接都需要大量的数据移动,除非原始数据源基于用于连接的键进行分区

C*不允许像这样的通用连接,因为涉及到成本,它面向OLTP工作负载,并且需要完全的数据洗牌本质上就是OLAP