为什么 Spark RDD 不支持 "flatten"

Why doesn't Spark RDD support "flatten"

看看这个片段[*]:

val la = List(Array(2, 3, 5), Array(7, 11, 13))
la.flatten

returns

res1: List[Int] = List(2, 3, 5, 7, 11, 13)

现在,我一直在玩 Spark,我偶然发现了一个问题。片段:

val myRdd: RDD[String] = sc.textFile("myFilePath", 10) map (_.split("\n"))

无法编译,因为右侧表达式的类型为 RDD[Array[String]]

就像在 [*] 中一样,我认为扁平化可以解决问题:

val myRdd: RDD[String] = (sc.textFile("myFilePath", 10) map (_.split("\n"))).flatten

但是发现RDD并没有提供这个操作。我的问题来了:

  1. RDD 不支持 flatten 的(设计)原因是什么?
  2. 我是否遗漏了关于如何使用 RDD work/should 的重要观点?

P.S。 我知道我可以用旧的好东西 flatMap 来实现我想要的

val myRdd: RDD[String] = (sc.textFile("myFilePath", 10) map (_.split("\n"))).flatMap(x => x)

您想在这里使用 flatMap 而不是 map。

val myRdd: RDD[String] = sc.textFile("myFilePath", 10) flatMap (_.split("\n"))

此外,textFile 已经按行拆分文件,因此您无需拆分。

Flatten 没有实现,因为它很难实现,您可以使用 flatMap(identity) 来达到同样的效果。因为它无论如何都是多余的,所以不值得努力实施。参见 https://issues.apache.org/jira/browse/SPARK-18855