要从我尝试过的Array
的每一列中找到不同的值
RDD[Array[String]].map(_.map(Set(_))).reduce {
(a, b) => (a.zip(b)).map { case (x, y) => x ++ y}}
成功执行。但是,我想知道是否有比上面的示例代码更有效的方法。谢谢。
答案 0 :(得分:4)
聚合会保存一个步骤,可能会也可能不会更有效
val z = Array.fill(5)(Set[String]()) // or whatever the length is
val d= lists.aggregate(z)({(a, b) => (a.zip(b)).map { case (x, y) => x + y}},
{(a, b) => (a.zip(b)).map { case (x, y) => x ++ y}})
你也可以尝试使用可变集并修改而不是在每一步生成一个新的(Spark明确允许):
val z = Array.fill(5)(scala.collection.mutable.Set[String]())
val d= lists.aggregate(z)({(a, b) => (a.zip(b)).foreach { case (x, y) => x+= y };a},
{(a, b) => (a.zip(b)).foreach { case (x, y) => x ++= y};a})