[英]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分鍾。 我想知道在加載后嘗試重新分區數據是否仍然有意義? 也許靠鑰匙?
如果我正確地理解了您的問題,您會在需要額外重新分配時詢問。 首先,你應該記住重新分配是一項昂貴的操作 。 明智地使用它。 其次,沒有嚴格的答案,而且還有經驗。 但是一些常見的情況是:
您可以嘗試在join, leftOuterJoin, cogroup...
之前調用您的日期repartition
join, leftOuterJoin, cogroup...
有時它可以加快計算速度。
您將數據flatMap
到更多“重量級”數據並遇到Java heap space Exception java.lang.OutOfMemoryError
。 那么你當然應該讓你的分區更小以適應flatMap
之后的數據。
您將數據加載到database \\ mongoDb \\ elasticSearch ...您調用數據的repartition
,然后在forEachPartition
代碼塊內部將所有這些分區批量插入到數據庫中。 所以這些塊的大小應該是合理的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.