GroupByKey遭遇數據混洗。GroupByKey功能可以通過使用combineByKey或reduceByKey來實現。何時應該使用此API?有沒有用例?什麼時候應該在spark編程中使用groupByKey API?
2
A
回答
1
根據以下鏈接,應避免使用GroupByKey。
3
合併和減少也最終會洗牌,但他們有更好的內存和高速性能特性,因爲他們能夠做更多的工作洗牌之前減少數據的體積。
請考慮是否必須通過組RDD [(group,num)]對數字屬性進行求和。 groupByKey
會給你RDD [(group,List [num])],然後你可以使用map
手動減少。洗牌需要將所有個人num
移到目標分區/節點以獲取該列表 - 許多行正在洗牌。
因爲reduceByKey
知道,你正在與num
在做,它可以在洗牌前總結每個單獨的分區(即合計起來。) - 所以你最多隻能有一個排每group
被寫入了洗牌分區/節點。
0
我會說如果groupByKey是你工作鏈中的最後一次轉換(或者你之後做的任何事情只有狹窄的依賴關係),你可以考慮它。
原因reducebyKey優選是 1.聯合如上 提到阿里斯特使得總和/ AGG變窄即可以分區內發生
相關問題
- 1. 什麼時候應該在IOS編程中使用UIViewController?
- 2. C++元編程,爲什麼和什麼時候應該使用?
- 3. 什麼時候應該使用AWS,什麼時候不使用
- 4. 什麼時候應該使用sed,什麼時候應該使用awk
- 5. 什麼時候應該使用memcpy,什麼時候應該使用memmove?
- 6. 什麼時候應該使用Import-Package,什麼時候應該使用Require-Bundle?
- 7. 什麼時候應該在WPF應用程序中使用PixelFormats.Pbgra32?
- 8. 什麼時候應該在Drupal 7中使用Webform vs Fields API?
- 9. 什麼時候應該使用async/await,什麼時候不用?
- 10. 什麼時候應該使用PostgreSQL中
- 11. 什麼時候應該使用UdpClient.BeginReceive?什麼時候應該在後臺線程上使用UdpClient.Receive?
- 12. 什麼時候應該使用Promises?
- 13. 什麼時候應該使用並行編程?
- 14. 什麼時候應該使用統一的着色器編程?
- 15. 什麼時候應該在多線程編程中使用「鎖定」?
- 16. 什麼時候應該使用datagrid,何時應該使用datagridview?
- 17. 什麼時候應該使用$(object),何時應該使用$ object?
- 18. 什麼時候應該在Scala中使用正規課程?
- 19. 在C#中,什麼時候應該使用一個結構,什麼時候應該使用一個類?
- 20. 什麼時候應該/不應該在Spark中序列化一個類?
- 21. 什麼時候應該使用FSharpFunc.Adapt?
- 22. 什麼時候應該使用_aligned_malloc()?
- 23. 什麼時候應該使用`use`?
- 24. 什麼時候應該使用$ rootScope?
- 25. 什麼時候應該使用$(document).ready?
- 26. 什麼時候應該使用html5 sessionStorage?
- 27. 什麼時候應該使用OWIN Katana?
- 28. 什麼時候應該使用流?
- 29. 什麼時候應該使用setScriptTimeout?
- 30. 什麼時候應該使用助手?
我不會說*「避免它2. ReduceByKey也將數據分區「*,但*」在可能的情況下更喜歡更專業的轉換「* :)。 – ale64bit
'groupByKey'與'reduceByKey'不同,你不能總是爲另一個分支。我猜如果你可以使用'reduceByKey',你應該。那篇文章有點過時了。 Spark的性能似乎發生了很大的變化(性能改進)。 – BAR