在Spark中生成笛卡尔积的替代方法

时间:2017-08-03 10:05:18

标签: java apache-spark

目前在我的火花代码中,我正在执行以下操作:

rdd2 = rdd1.cartesian(rdd1)
rdd2.filter( remove_some_data filter)

原来它首先计算完整的笛卡儿,然后过滤掉不必要的组合。

相反,有没有办法只使用我想要的组合创建PairRDD?

更详细:

我有N个项目的RDD。

笛卡尔积产生N x N项。 我只想要这N个项目之间的唯一交互。

即对于用户1:N-1对
对于用户2:N-2对 对于用户3:N-3对



对于用户N-1:1对

在PairRDD中总共有1 + 2 + .... +(N-1)个元素。

我目前如何实现这一目标是使用

rdd.cartesian(rdd).filter(my_filter_function). 

相反,我直接想要得出最终结果组合。

1 个答案:

答案 0 :(得分:0)

此幻灯片组中的幻灯片20提出了另一种选择,尽管我自己还没有尝试过。链接:https://www.slideshare.net/databricks/optimizing-apache-spark-sql-joins

相关摘录为:

  
      
  1. 通过UID创建UID的RDD
  2.   
  3. 强制广播表中的行
  4.   
  5. 通过UID调用给定UID的UDF以查找表行并执行计算
  6.   
  7. 将计算时间安排在样本集上以调整群集大小
  8.