PySpark 使用函数创建多索引配对 RDD

Posted

技术标签:

【中文标题】PySpark 使用函数创建多索引配对 RDD【英文标题】:PySpark Create Multi Indexed Paired RDD with function 【发布时间】:2015-06-03 02:21:36 【问题描述】:

不久前,我问了一个关于组织和构建具有多个键的 RDD 的问题。见PySpark Suggestion on how to organize RDD

我当前 rdd 中的每个对象都包含一个 start_timeend_timeidposition

我想按idtime 对对象进行分组。如果两个或多个对象具有相同的id 或任何重叠时间,我会将它们组合在一起。

找到重叠的逻辑很简单:

if x1.start_time > x2.start_time and x1.start_time < x2.end_time
if x2.start_time > x1.start_time and x2.start_time < x2.end_time

我只是不太明白如何使用这种逻辑创建配对的 RDD。

任何建议将不胜感激,谢谢!

【问题讨论】:

【参考方案1】:

我认为最简单的方法是在 id 上加入,然后过滤结果(如果没有太多具有相同 id 的情况)。为此,我首先将 RDD 映射到 (id, record),然后进行连接。

【讨论】:

感谢您的回复!不幸的是,有大量具有相同 ID 的对象。一个问题 - 您的意思是“要做到这一点,我首先将 RDD 映射到 (id, record),然后执行 filter”? 好吧,我们不能在加入之前进行过滤,因为您的过滤条件取决于查看时间戳。如果您有很多具有相同想法的对象,以至于具有相同 id 的对象的叉积太大,那么我认为下一个最合理的方法是进行 cogroup,然后使用您的连接逻辑进行平面映射。 啊,我明白了,所以你是在建议我这样组合:rdd.map(lambda x: (x.id, (x.startTime(), x.endTime(), [x]))) 这将是开始吧。

以上是关于PySpark 使用函数创建多索引配对 RDD的主要内容,如果未能解决你的问题,请参考以下文章

多索引表 创建多索引表

Pandas 中的多索引排序

如何在多索引列上使用 pandas rename()?

如何使用 pandas 对多索引数据框使用 map 函数? [复制]

如何为多索引数据框创建图

使用具有多索引的数据框创建条形图