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

标签 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。这会导致这个问题吗?还有其他方法吗?

最佳答案

您似乎想要计算 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/

相关文章:

scala - 在测试期间向 Session 添加值(FakeRequest、FakeApplication)

scala - Scala for 推导式中 val 的作用域规则是什么

scala - 如何模式匹配扩展多个特征的对象?

java - Hadoop HDFS文件拆分成 block 的哪个Java文件

java - Spark 1.4.0 java.lang.NoSuchMethodError : com. google.common.base.Stopwatch.elapsedMillis()J

amazon-web-services - 如何在现有的Apache Spark独立群集上安装Apache Zeppelin

apache-spark - 发生错误时 Spark Streaming 关闭作业

scala - 在 Scala 中返回临时 Spark SQL 表

hadoop - 无法设置伪分布式hadoop集群

hadoop - 我应该在cloudera,MapR和Hortonworks中选择哪个Hadoop发行版?