以下是我工作的阶段:
- 阶段1-进行一些计算,并将临时数据持续到文件中。将持续多个临时数据范围并在流中读取。
- 第2阶段 - 阅读临时数据并执行其他计算并将其存储到最终数据文件中。
Note :我坚持多个温度文件,因为我无法将它们保存在内存中,因为数据很大。(8400万行,200万行不同的主要键野生野生野生野生野生型值)
i使用coleasce(n)或repartition(n),其中n是一个大数字:200。现在,这导致我坚持不懈的每个临时数据在输出中创建了200个文件。我知道Coleasce/Recartition对于写作表现来说是一项昂贵的工作。但是,当我使用n = 200时,我确实会变得更好的并行性。这都是关于写的。
现在,此温度数据将通过下一过程读取,因此n = 200更好或n = 50?
另外,我知道父分区编号(n)将是下一个写作操作的基础。
QS:
- 何时使用coleasce(无洗)以及何时使用待机(洗牌)?
- 要使用的分区值,为什么?
- 我应该遵循什么策略来获得更好的性能?
1)当不太可能偏向输出文件的大小时,请使用cocece(1个文件2GB,REST 0GB)。当您想平衡执行者之间的工作时,重新分配是最有用的,因此每个分区的大小都一样。
2)根据分配的值设置输出分区以写入和读取时间。例如,有大量的分区(较小的文件)来编写和阅读一次(重新中间输出),但是在编写一次读取多次读取时(用于使用Parquet作为分析)时,将分区设置较低(较大的文件)。越多的分区,可以立即完成的并发任务。
3)如果可以的话,请尝试不同的方法并测量写作和阅读时间;确定最适合您用例的权衡。
这很像压缩算法,有些可以快速压缩(例如lzo),其他人以最小的占地面积(例如BZIP2)和其他人快速解压缩(例如Snappy)。