私はSparkとScalaで作業しています。私はArray[String]
のRDDを持っています。 RDDには、(name, age, work, ...)
のような属性の値が含まれています。私は、各属性のすべての一意の値を収集するために、一連の可変文字列(attributes
)を使用しています。このようなものとして、RDDのSpark RDDから一意の値を持つScala Seqの集合を埋める方法は?
思う:
val someLength = 10
val attributes = Seq.fill[mutable.Set[String]](someLength)(mutable.Set())
val splitLines = rdd.map(line => line.split("\t"))
lines.foreach(line => {
for {(value, index) <- line.zipWithIndex} {
attributes(index).add(value)
// #1
}
})
// #2
:私は、次のコードを持っている
attributes = (("name1","name2","name3"),("21","22"),("JobA","JobB"))
:最後に
("name1","21","JobA")
("name2","21","JobB")
("name3","22","JobA")
私はこのような何かをしたいです
私がデバッグしてlinで停止するとe #1と表示されていますが、すべて正常です。attributes
は一意の値で正しく埋められています。
ループの後、行#2で、属性が再び空です。その属性がセットのシーケンスで、その中に示しみると、大きさの全て0
Seq()
Seq()
...
であること私が間違って何をしているのですか?私は気付いていない、何らかのスコープが続いていますか?
専門的な好奇心からの質問:今Sparkを学習しているのなら、なぜRDD APIを使用していますか?なぜデータセット/データフレームではないのですか? – maasg
@maasg私はOPではありませんが、Sparkで始めたばかりの場合は、抽象度の低いところから始めてDataSets/Framesに向かいます。技術的にはこれは抽象化レベルを「上がる」わけではありませんが、生のRDDに行かない限り、あなたができないことはまだあります。 –
@maasg私はYuvalに同意します。私はDataSets/DataFramesと比較して、SparkをRDDで学習する方が簡単で有益であると感じています。 –