簡體   English   中英

選擇列RDD scala-spark

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM