我试图在另一个转换中转换 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。这会导致这个问题吗?还有其他方法吗?
最佳答案
您似乎想要计算 name_match
的每个元素与 first_names_collection
的每个元素之间的差异函数,并找到差异为 4 的对。
通常,对两个 RDD 执行成对计算是通过首先使用 cartesian
枚举所有对来完成的。您的解决方案类似于:
first_name.cartesian(first_names_collection) // generate all pairs
.filter{case (lhs, rhs) => soundex.difference(lhs, rhs) == 4}
.groupByKey
关于scala - Spark - 另一个转换中的 Rdd 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39214903/