簡體   English   中英

pyspark使用partitionby分區數據

[英]pyspark partitioning data using partitionby

我知道partitionBy函數分區我的數據。 如果我使用rdd.partitionBy(100)它會將我的數據按鍵分成100個部分。 即,與類似鍵相關聯的數據將被組合在一起

  1. 我的理解是否正確?
  2. 是否建議將分區數等於可用內核數? 這會使處理更有效嗎?
  3. 如果我的數據不是鍵值格式怎么辦? 我還能使用這個功能嗎?
  4. 假設我的數據是serial_number_of_student,student_name。 在這種情況下,我可以通過student_name而不是serial_number對我的數據進行分區嗎?
  1. 不完全是。 Spark,包括PySpark, 默認使用散列分區 排除相同的密鑰,分配給單個分區的密鑰之間沒有實際的相似性。
  2. 這里沒有簡單的答案。 全部取決於數據量和可用資源。 分區數量太大或太少都會降低性能。

    一些資源聲稱分區數量應該是可用核心數量的兩倍左右。 另一方面,單個分區通常不應超過128MB,單個shuffle塊不能超過2GB(參見SPARK-6235 )。

    最后,您必須糾正潛在的數據偏差。 如果某些密鑰在您的數據集中過多,則可能導致資源使用次優和潛在失敗。

  3. 不,或者至少不是直接的。 您可以使用keyBy方法將RDD轉換為所需的格式。 此外,任何Python對象都可以被視為鍵值對 ,只要它實現了所需的方法,使其行為類似於長度等於2的Iterable 請參閱如何確定對象是否是PySpark中的有效鍵值對

  4. 這取決於類型。 只要密鑰可以清洗 *然后是。 通常,它意味着它必須是不可變結構,並且它包含的所有值也必須是不可變的。 例如,列表不是有效鍵,而是整數tuple

引用Python詞匯表

如果一個對象具有一個在其生命周期內永遠不會改變的哈希值(它需要__hash__()方法),並且可以與其他對象進行比較(它需要__eq__()方法),則該對象是可__hash__() 比較相等的可哈希對象必須具有相同的哈希值。

我最近使用了partitionby。 我所做的是重構我的數據,以便我想要放在同一個分區中的所有那些具有相同的密鑰,而密鑰又是數據中的值。 我的數據是一個字典列表,我用字典中的密鑰轉換成了tupples。最初,partitionby沒有在同一個分區中保存相同的密鑰。 但后來我意識到鍵是字符串。 我把它們轉換為int。 但問題仍然存在。 數字非常大。 然后,我將這些數字映射到小數值,它工作。 所以我的收獲是密鑰需要是小整數。

暫無
暫無

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

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