當我執行變換像Spark PairRDDs和DataFrames是否被索引?
pairedRdd1.join(pairedRdd2)
或
dataframe1.join(dataframe2, dataframe1.one == dataframe2.one)
在第一PairRDD或數據幀的每個元素在第二的每一個元素進行比較,或者它更有效地完成?基於我對Spark的存儲工作原理的理解,答案是前者。但我一直相信,有一種Spark技術可以使查找速度更快。
當我執行變換像Spark PairRDDs和DataFrames是否被索引?
pairedRdd1.join(pairedRdd2)
或
dataframe1.join(dataframe2, dataframe1.one == dataframe2.one)
在第一PairRDD或數據幀的每個元素在第二的每一個元素進行比較,或者它更有效地完成?基於我對Spark的存儲工作原理的理解,答案是前者。但我一直相信,有一種Spark技術可以使查找速度更快。
標準RDD和DataFrames都沒有索引。在PairwiseRDDs
上執行joins
並在DataFrames
上加上等號加入Spark正在使用分區。它可以利用現有的分區程序,或者如果不存在應用分區作爲join
操作的一部分。
這意味着基於等式的聯接只需要對明確定義的對進行比較,而不是完整的笛卡兒積。在分區級別,這可以通過使用coGroup
類似操作(RDD)或SortMergeJoin
(DataFrames
)進一步改進。
這並不意味着對分佈式數據結構的索引是不可能的。 Spark生態系統中有一些工具可以在Spark(IndexedRDD
)之上提供索引,或者使用外部索引(IgniteRDD
)。最後,壓縮的列式存儲可用於對未編制索引的數據執行高效查找。
關於對PairwiseRDD
所有lookup
操作取決於分區:
lookup
相當於filter
。