我目前有一个火花塞集群,有4个工作节点和2个头节点。我在blob存储中有一个1.5 GB的CSV文件,我可以从其中一个头节点访问。我发现加载这些数据并使用PySpark缓存它需要很长时间。有没有办法加快数据加载?
我想到的是加载数据,然后将数据划分为k(节点数)不同的段,并将它们保存为blob作为镶木地板文件。这样,我可以并行加载数据集的不同部分然后联合......但是,我不确定是否所有数据都只是加载到头节点上,然后当计算发生时,它会分配给其他机器。如果后者是真的,则分区将是无用的。
非常感谢帮助。谢谢。
答案 0 :(得分:1)
通常,您需要在blob存储上使用较小的文件大小,以便您可以在blob存储之间传输数据以并行计算,从而提高传输速率。一个好的经验法则是文件大小在64MB到256MB之间;一个很好的参考是Vida Ha的Data Storage Tips for Optimal Spark Performance。
你的阅读文件,然后将其保存回Parquet(默认的snappy编解码器压缩)是一个好主意。 Parquet本身由Spark使用,通常可以更快地查询。唯一的调整是按文件大小与工作节点数进行分区。数据被加载到工作节点上,但分区很有用,因为创建了更多任务来读取更多文件。