RDD는 어떻게 분할됩니까?
기본적으로 파티션은 각 HDFS 파티션에 대해 만들어지며 기본적으로 64MB입니다. 더 읽기 here.
파티션간에 데이터의 균형을 유지하는 방법은 무엇입니까?
먼저, 하나 다시 분할 자신의 데이터를 할 수있는 세 가지 방법에 대해 살펴 :
1) 두 번째 매개 변수를 전달, (가) textFile()으로 RDD에 대한 파티션 의 최소 번호를 원하는, 하지만 조심 :
In [14]: lines = sc.textFile("data")
In [15]: lines.getNumPartitions()
Out[15]: 1000
In [16]: lines = sc.textFile("data", 500)
In [17]: lines.getNumPartitions()
Out[17]: 1434
In [18]: lines = sc.textFile("data", 5000)
In [19]: lines.getNumPartitions()
Out[19]: 5926
당신이 볼 수 있듯이, [16]
는 RDD는이 파티션 수 있기 때문에, 사람이 무엇을 기대하지 않는다, 이미 요청한 최소 파티션 수보다 큽니다.
2)이 같은 repartition(), 사용
In [22]: lines = lines.repartition(10)
In [23]: lines.getNumPartitions()
Out[23]: 10
경고 :이 셔플를 호출하고 증가 당신 RDD는이 파티션의 수를 할 때 사용되어야한다. docs 가입일
:
셔플은 파티션에있어 상이하게 그룹화되도록 재분배 데이터의 점화기구이다. 이것은 전형적으로 집행자와 기계간에 데이터를 복사하여 셔플을 복잡하고 값 비싼 작업으로 만듭니다.
3)이 같은 coalesce()를 사용하여 여기에
In [25]: lines = lines.coalesce(2)
In [26]: lines.getNumPartitions()
Out[26]: 2
는 스파크는 RDD을 축소 할 것이라는 점을 알고 그것의 이점을 얻을 수 있습니다. repartition() vs coalesce()에 대해 더 자세히 읽어보십시오. 데이터가 완벽하게 파티션에서이 모든 보증
그러나 균형됩니다 것? 별로 경험하지 못했지만, 내가 경험 한대로 How to balance my data across the partitions?
당신은 3 개의 대답을 가지고 있습니다. :) – gsamaras