簡體   English   中英

PySpark partitionBy,重新分區,還是什么都沒有?

[英]PySpark partitionBy, repartition, or nothing?

所以我所做的就是

rdd.flatMap(lambda x: enumerate(x))

為我的數據制作0-49鍵。 然后我決定這樣做:

rdd.flatMap(lambda x: enumerate(x)).partitionBy(50)

我注意到發生了一些奇怪的事情,因此對於以下文件大小,10GB需要46秒才能完成計算,50GB文件需要10分31秒。 我檢查了文件,由於某種原因它只有4塊。

所以我所做的改變了:

sc.textFile("file", 100)

我刪除了分區,50GB文件下降到大約1分鍾。 我想知道在加載后嘗試重新分區數據是否仍然有意義? 也許靠鑰匙?

如果我正確地理解了您的問題,您會在需要額外重新分配時詢問。 首先,你應該記住重新分配是一項昂貴的操作 明智地使用它。 其次,沒有嚴格的答案,而且還有經驗。 但是一些常見的情況是:

  1. 您可以嘗試在join, leftOuterJoin, cogroup...之前調用您的日期repartition join, leftOuterJoin, cogroup...有時它可以加快計算速度。

  2. 您將數據flatMap到更多“重量級”數據並遇到Java heap space Exception java.lang.OutOfMemoryError 那么你當然應該讓你的分區更小以適應flatMap之后的數據。

  3. 您將數據加載到database \\ mongoDb \\ elasticSearch ...您調用數據的repartition ,然后在forEachPartition代碼塊內部將所有這些分區批量插入到數據庫中。 所以這些塊的大小應該是合理的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM