如何使用Spark来随机播放大文件?

时间:2017-08-07 06:30:41

标签: apache-spark shuffle

我有一个20G的文本文件,我想要改变它的行。由于本地内存的限制,我想在spark上做。有人可以告诉我该怎么做吗?

P.S。我考虑过使用密钥对(random.random(), line),因此在保存文件时,spark会按random.random()排序。我不知道它是否有效。

2 个答案:

答案 0 :(得分:0)

假设Python,假设您的文本文件RDD被称为lines,请尝试:

shuffled_RDD = lines.map(lambda line: (random.random(), line)).sortByKey.map(lambda line: line[1:])

这未经过测试,但逻辑应该有效。

答案 1 :(得分:0)

一个简单的解决方案是将文件作为数据框读取,然后使用orderBy;

import org.apache.spark.sql.functions.rand
val shuffledDF = df.orderBy(rand())

这将随机化数据帧行的顺序。在此之后,只需再次保存为文本文件。