2016-12-28 12 views
0

次の操作を行う必要があります。rddの各フィールドを選択する。 Iの各列を選択し、スカラ、3行目のexpecially部分にそれを変換する必要がありますカラムRDDスカラースパークの選択

val rddHash=x.map(row =>(DigestUtils.sha1Hex(row(0).toString.getBytes("UTF-8")),row(1).toString)).reduceByKey((a,b)=>(a+b)) 
val z=rddHash.cartesian(rddHash) 
val outRdd=z.map(m => (m(0)(0),(m(1)(0),euclidean(m(0)(1).split(','),m(1)(1).split(','))))) 

Xは(文字列オブジェクト)の荷電のデータセットです。

しかし、このコードは機能しません。問題は、m(0)(0)、m(1)(0)などを介して要素を選択しようとする第3行に関連する部分です。 エラーは次のとおりです。

<console>:42: error: ((String, String), (String, String)) does not take parameters 

私はScalaではRDDの各フィールドを選択するにはどうすればよいですか?

Psがpysparkの私のコード行は、次のいずれかです。

デカルトは同じstruuctureは前に示した持ち
outRdd=cartesian.map(lambda m: (m[0][0],(m[1][0],euclidean(m[0][1].split(','),m[1][1].split(','))))) 

:あなたは直接Scalaではタプルにm(index)を呼び出すことはできません

((String, String), (String, String)) 

答えて

1

。あなたはどちらかのアクセスフィールドは_1を使用したり、通常より読みやすいパターンマッチングを、使用することができます

val outRdd = z.map(m => (m._1._1, (m._2._1, ...)) 

または:

val outRdd = z.map { case ((hex1, obj1), (hex2, obj2)) => 
    (hex1, (hex2, ...)) 
} 
関連する問題