如何在Spark

时间:2015-07-25 07:04:34

标签: performance scala apache-spark

要从我尝试过的Array的每一列中找到不同的值

RDD[Array[String]].map(_.map(Set(_))).reduce { 
(a, b) => (a.zip(b)).map { case (x, y) => x ++ y}}

成功执行。但是,我想知道是否有比上面的示例代码更有效的方法。谢谢。

1 个答案:

答案 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})