pyspark RDD zip、zipWithUniqueId、およびzipWithIndex操作の詳細な説明
Detailed Explanation Pyspark Rdd Zip
3、zipWithUniqueId
生成された一意のLongIDを使用してこのRDDを圧縮します。
k番目のパーティションのアイテムはIDk、n + k、2を取得します n + k、…、ここでnはパーティションの数です。したがって、ギャップが存在する可能性がありますが、このメソッドはzipWithIndexとは異なりスパークジョブをトリガーしません
パーティションに関連するk-vを返します
k、n + k、2 n + k、
nはパーティションです
kはn番目のパーティションのk番目の値です
0からカウントを開始します
Program example: a partition a=sc.parallelize(list('abczyx'),1).zipWithUniqueId().glom().collect() print(a)
結果はzipWithIndex()と同じです
Result [[('a', 0), ('b', 1), ('c', 2), ('z', 3), ('y', 4), ('x', 5)]]
2つのパーティション
Code: rdd=sc.parallelize(list('abczyx'),2) print(rdd.glom().collect()) a=rdd.zipWithUniqueId().glom().collect() print(a)
結果:
[['a', 'b', 'c'], ['z', 'y', 'x']] [[('a', 0), ('b', 2), ('c', 4)], [('z', 1), ('y', 3), ('x', 5)]]
ここに画像の説明を挿入
4つのパーティション
rdd=sc.parallelize(list('45abczyx'),4) print(rdd.glom().collect()) a=rdd.zipWithUniqueId().glom().collect() print(a)
[['4', '5'], ['a', 'b'], ['c', 'z'], ['y', 'x']] [[('4', 0), ('5', 4)], [('a', 1), ('b', 5)], [('c', 2), ('z', 6)], [('y', 3), ('x', 7)]]
分析: