RDD distinct 上的 Foreach 不起作用

Foreach on a RDD distinct does not work

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

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

但它 returns 对我来说只是 "attribute in {}",为什么?哪个是我的错误?

如果我写 val array <- data.distinct.collect 并对其进行迭代,它就会起作用。为什么?

运行 PySpark 上的一个类似示例,我得到 "lambda cannot contain assignment",所以我假设 Scala 的工作方式相同。

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

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