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_time
、end_time
、id
和 position
。
我想按id
和time
对对象进行分组。如果两个或多个对象具有相同的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的主要内容,如果未能解决你的问题,请参考以下文章