[英]pyspark partitioning data using partitionby
我知道partitionBy
函數分區我的數據。 如果我使用rdd.partitionBy(100)
它會將我的數據按鍵分成100個部分。 即,與類似鍵相關聯的數據將被組合在一起
這里沒有簡單的答案。 全部取決於數據量和可用資源。 分區數量太大或太少都會降低性能。
一些資源聲稱分區數量應該是可用核心數量的兩倍左右。 另一方面,單個分區通常不應超過128MB,單個shuffle塊不能超過2GB(參見SPARK-6235 )。
最后,您必須糾正潛在的數據偏差。 如果某些密鑰在您的數據集中過多,則可能導致資源使用次優和潛在失敗。
不,或者至少不是直接的。 您可以使用keyBy
方法將RDD轉換為所需的格式。 此外,任何Python對象都可以被視為鍵值對 ,只要它實現了所需的方法,使其行為類似於長度等於2的Iterable
。 請參閱如何確定對象是否是PySpark中的有效鍵值對
tuple
。 引用Python詞匯表 :
如果一個對象具有一個在其生命周期內永遠不會改變的哈希值(它需要
__hash__()
方法),並且可以與其他對象進行比較(它需要__eq__()
方法),則該對象是可__hash__()
。 比較相等的可哈希對象必須具有相同的哈希值。
我最近使用了partitionby。 我所做的是重構我的數據,以便我想要放在同一個分區中的所有那些具有相同的密鑰,而密鑰又是數據中的值。 我的數據是一個字典列表,我用字典中的密鑰轉換成了tupples。最初,partitionby沒有在同一個分區中保存相同的密鑰。 但后來我意識到鍵是字符串。 我把它們轉換為int。 但問題仍然存在。 數字非常大。 然后,我將這些數字映射到小數值,它工作。 所以我的收獲是密鑰需要是小整數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.