[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1)]
ただし、出力は以下の通りです:
def fun(x, n):
return (x, n)
rdds = []
for i in range(2):
rdd = sc.parallelize(range(5*i, 5*(i+1)))
rdd = rdd.map(lambda x: fun(x, i))
rdds.append(rdd)
a = sc.union(rdds)
print a.collect()
を私は、出力は次のことを予想していました
[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1)]
これは、少なくとも言わないと驚異的です。
それは(for
ループの最後の実行から)1であるcollect()
が呼び出されたとき、それはクマ1は、ある原因RDDS、RDDSを作成するために使用されているi
の値の遅延評価に、そうです。
ここで、タプルの両方の要素は、i
から派生しています。
しかし、それはそうです、タプルの最初の要素のために、i
クマはタプルi
の2番目の要素は0と1の間の値値2.
を負う誰かが何が起こっているのか説明していただけますか?
ありがとうございました。
'i = i'は' i'をラムダ関数のスコープにプッシュし、呼び出されるとラムダ関数のローカル値が最初にアクセスされます。 – MYGz
@MohammadYusufGhaziはい。デフォルト値は、定義スコープの関数定義時点で評価されます。 –
'range(2) 'によって生成された' list'の '0'と' 1'の整数オブジェクトがラムダ関数の引数に割り当てられます。そのリスト内の項目はまだ他の変数によって指し示されているので、そのリストはガベージコレクションされません。 – MYGz