[英]Selecting column RDD scala-spark
我需要執行以下操作:在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))
您不能直接在scala中的元組上調用m(index)
。
您可以使用_1
或使用模式匹配(通常更易讀)來訪問字段:
val outRdd = z.map(m => (m._1._1, (m._2._1, ...))
要么:
val outRdd = z.map { case ((hex1, obj1), (hex2, obj2)) =>
(hex1, (hex2, ... ))
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.