如何在 Spark 中随机洗牌 RDD 的行?

How to randomy shuffe rows of an RDD in Spark?

我有一个 Rdd[String],我想打乱这个 Rdd 的所有行。我该如何实现?

例如:

名为 rdd 的 RDD 对象,你可以 运行: rdd.collect.foreach(t => println(t)) 有输出:

1

2

3

4

我想洗牌 rdd 的行,以便 运行ning rdd.collect.foreach(t => println(t)) 在洗牌之后就像:

3

4

1

2

您并没有真正洗牌 RDD。直接对 RDD 进行洗牌在概念上没有多大意义,因为数据是分区的,并且在这种情况下无法保证顺序。如果这是您想要采用的路线,您可以查看自定义分区程序。

现在,通过执行 collect(),您已将其转换为 Scala 集合。您可以使用标准集合库来打乱数据。

Collections.shuffle(rdd.collect).foreach(t=>println(t))