我试图在另一个转换中转换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。这会导致这个问题吗?还有其他办法吗?
答案 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