私は関数型プログラミングに慣れていません。私がしたいことは、文字列のRDDを取り出し、それらを分割し、各単語を別のRDDへのエントリとして割り当てることです。私のRDDにはタブで区切られた文字列が含まれています。RDDは各部分文字列を別のRDDにマップします
私は分割したい部分文字列を取り、それを別のRDDに全体文字列としてマップします。次に、メインノードに文字列を収集し、最後に別のRDDにマップしたい単語を分割します。ブルートフォースのアプローチとして私はこれを行った:
var e1String = ""
val e1HashTagTemp = entitySetE1.map{ x=>
var containedEntities = ""
val entityString = x.split("\t")(2).split(" ")
entityString.foreach(word => containedEntities += word.toLowerCase + " ")
containedEntities
}
e1HashTagTemp.collect().foreach(x=> e1String += x)
val e1HashTags = sc.parallelize(e1String.split(" ")).distinct
私はこれがこのシナリオにとって最適な解決策ではないと確信している。
例:
[RDD] entitySetE1 = [ "TEST0 \トンtest1の\トンこれは私が\トンTEST3 \トン TEST4マップするフィールドである"、「TEST0 \トンtest1の\トン、これは私は再びこれをマップ " "マップするフィールドである"]
[文字列] e1String =" この "
[RDD] e1HashTagTemp = []" \トンTEST3 \トンTEST4再びこれをマッピングします私は地図をもう一度マップしたいフィールドです "
[RDD] e1HashTags = ["this"、 "is"。 「」、「フィールド」、「i」は、「欲しい」、「に」、「もう一度」、「マップ」
私の基準で分割するために少し修正しました: entitySetE1.map(s => s.split( "\ t")(2))... おかげさまで、ありがとうございました。 –