Spark PairRDDs 和 DataFrames 是不是被索引?
Posted
技术标签:
【中文标题】Spark PairRDDs 和 DataFrames 是不是被索引?【英文标题】:Are Spark PairRDDs and DataFrames Indexed?Spark PairRDDs 和 DataFrames 是否被索引? 【发布时间】:2016-03-03 19:50:41 【问题描述】:当我执行类似的转换时
pairedRdd1.join(pairedRdd2)
或
dataframe1.join(dataframe2, dataframe1.one == dataframe2.one)
第一个 PairRDD 或 DataFrame 中的每个元素与第二个中的每个元素相比,还是更有效?根据我对 Spark 存储工作原理的理解,答案是前者。但我一直相信有某种 Spark 魔法可以使查找速度更快。
【问题讨论】:
【参考方案1】:标准 RDD 和 DataFrame 都没有被索引。要在PairwiseRDDs
上执行joins
并在DataFrames
上执行相等连接,Spark 正在使用分区。它既可以利用现有的分区程序,也可以在不存在的情况下应用分区作为join
操作的一部分。
这意味着基于相等的连接只需要对定义明确的对进行比较,而不是完整的笛卡尔积。在分区级别,这可以通过使用 coGroup
类似操作 (RDD) 或 SortMergeJoin
(DataFrames
) 进一步改进。
这并不意味着无法对分布式数据结构进行索引。 Spark 生态系统中有一些工具可以在 Spark 之上提供索引 (IndexedRDD
) 或使用外部索引 (IgniteRDD
)。最后,压缩的列式存储可用于对未索引的数据执行有效的查找。
关于PairwiseRDD
上的lookup
操作都依赖于分区器:
lookup
等价于 filter
。
如果 RDD 具有分区器行为,则类似于使用单独链接查找哈希表。首先我们确定一个桶(分区),然后对其迭代器执行线性查找。
【讨论】:
以上是关于Spark PairRDDs 和 DataFrames 是不是被索引?的主要内容,如果未能解决你的问题,请参考以下文章
pandas一些基本操作(DataFram和Series)_1
pandas一些基本操作(DataFram和Series)_3
pandas一些基本操作(DataFram和Series)_4
pandas一些基本操作(DataFram和Series)_2