Spark - 在另一个转换中的Rdd转换

时间:2016-08-29 20:45:04

标签: scala hadoop apache-spark rdd

我试图在另一个转换中转换RDD。因为,RDD转换和动作只能由我收集第二个RDD的驱动程序调用,并尝试在其他转换中应用转换,如下所示

val name_match = first_names.map(y => (y, first_names_collection.value.filter(z => soundex.difference(z, y) == 4 )   ))

以上代码抛出以下异常

org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.yarn.exceptions.ApplicationAttemptNotFoundException): Application attempt appattempt_1468905506642_46091_000001 doesn't exist in ApplicationMasterService cache.

这里,first_names_collection的大小超过10 GB。这会导致这个问题吗?还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

看起来您想要计算name_match的每个元素与first_names_collection的每个元素之间的差异函数,并找到差异为4的对。

通常,通过首先使用cartesian枚举所有对来完成对两个RDD的成对计算。您的解决方案看起来像:

first_name.cartesian(first_names_collection)                     // generate all pairs
  .filter{case (lhs, rhs) => soundex.difference(lhs, rhs) == 4}
  .groupByKey