我需要执行以下操作:在 rdd 中选择每个字段。我必须在 Scala 中将其转换,尤其是在第三行中的部分,选择每一列:
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 是记为(String,Object)的数据集。
但是此代码不起作用,问题是与第三行有关的部分,我尝试通过 m(0)(0),m(1)(0)选择元素,依此类推。错误是:
<console>:42: error: ((String, String), (String, String)) does not take parameters
如何在 Scala 的 rdd 中选择每个字段?
ps 我在 pyspark 中的代码行如下:
outRdd=cartesian.map(lambda m: (m[0][0],(m[1][0],euclidean(m[0][1].split(','),m[1][1].split(',')))))
笛卡尔具有与以前相同的结构:
((String, String), (String, String))
1 回答
您无法直接在 scala 中的元组上调用
m(index)
。您可以使用
_1
或使用模式匹配(通常更易读)来访问字段:要么: