RDD上的Foreach不起作用

时间:2016-05-03 17:20:27

标签: scala apache-spark rdd distinct-values

我正在尝试连接Spark RDD的所有不同值,用逗号分隔它们。这是我的代码:

def genPredicateIn(data: RDD[String], attribute: String): String = {
  var s: String = attribute + " in {"
  val distinct = data.distinct
  distinct.foreach(s += ", " + _)
  s += "}"
  s
}

但它只返回"attribute in {}",为什么?这是我的错误?

如果我写val array <- data.distinct.collect并对其进行迭代,它就有效。为什么呢?

1 个答案:

答案 0 :(得分:1)

在PySpark上运行一个类似的例子,我得到&#34; lambda不能包含赋值&#34;,所以我假设Scala的工作方式相同。

您应该能够collect RDD,然后执行逗号连接。这基本上就是你正在做的事情。

您可能无法进行分配的原因是因为Spark无法将您的字符串传递给所有工作节点并将其与不同的数据分区连接,然后累积结果以将其传递回运行代码。