如何在Spark中随机洗乱RDD的行



我有一个 Rdd[String],我想洗牌这个 Rdd 的所有行。我如何实现这一点?

例如:

名为rdd

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

1

阿拉伯数字

3

我想洗牌rdd

的行,以便在洗牌后运行rdd.collect.foreach(t => println(t))是这样的:

3

1

阿拉伯数字

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

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

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

最新更新