0
私は、aggregateByKeyについて説明する以下のスカラーの例を見つけました。 スカラ例:上記のScalaのコードのPythonセットを使用したAggregateBykey
val pairs=sc.parallelize(Array(("a",3),("a",1),("b",7),("a",5)))
import scala.collection.mutable.HashSet
//the initial value is a void Set. Adding an element to a set is the first
//_+_ Join two sets is the _++_
val sets = pairs.aggregateByKey(new HashSet[Int])(_+_, _++_)
sets.collect
出力は次のとおりです。私が間違っているかわからない
pair = sc.parallelize([("a",3),("a",1),("b",7),("a",5)])
sets=pair.aggregateByKey((set()),(lambda x,y:x.add(y)),(lambda x,y:x|y))
sets.collect()
:
res5: Array[(String, scala.collection.mutable.HashSet[Int])] =Array((b,Set(7)), (a,Set(1, 5, 3)))
私はPythonで上記Scalaのコードを書き直しました。 Pythonのコードは、次のエラーメッセージを返します。
AttributeError: 'NoneType' object has no attribute 'add'
は、一般的に言って、あなたがセットにNoneを追加していないしていることを意味します:セットを返す必要がありますが機能します。 Noneのインスタンスが連鎖集約で追加されるように呼び出されています。だからエラー。 'pair.aggregateByKey(set())、(lambda x、y:x.add(y))、(lambda x、y:x | y))とは何ですか? – skrubber
私は、次の出力を生成したいと思います:(b、Set(7))、(a、Set(1、5、3))したがって、空のセットを作成し、キーに基づいて設定する要素を追加しました。 – Ravi
前に私のコメントを参照してください、そのコードスニペットは、セットに割り当てることなく何を与えるのですか? – skrubber