Scala 在Spark中反转一对的键和值
我想反转客户ID和访问次数的密钥和值对:Scala 在Spark中反转一对的键和值,scala,apache-spark,Scala,Apache Spark,我想反转客户ID和访问次数的密钥和值对: scala> val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).reduceByKey(_+_).foreach(println) 结果: (48784,3) (47847,10) (87673,8) (67654,4) 我想把这一对反转成这样: (3,48784) (10,47847) (8,87673) (4,67654) va
scala> val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).reduceByKey(_+_).foreach(println)
结果:
(48784,3)
(47847,10)
(87673,8)
(67654,4)
我想把这一对反转成这样:
(3,48784)
(10,47847)
(8,87673)
(4,67654)
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).
reduceByKey(_+_).map(X => (x._2,x._1)).foreach(println)
我在这个网站上研究过这个问题的类似答案,并尝试了以下方法
input.map{pair=>pair.swap}
val PairReverse=pair.map(X=>(X.\u 2,X.\u 1))
val PairReverse=pair.map(X=>((1)、(0))
.foreach(println)
,就可以了
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).reduceByKey(_+_).foreach(println)
asforeach
是一个动作,返回unit()
foreach
定义如下
def foreach(f:T=>单位):单位
删除foreach()
后,以下内容应该对您有用
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).reduceByKey(_+_)
val pairReverse = input.map(pair => pair.swap)
pairReverse.foreach(println)
或
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).reduceByKey(_+_)
val pairReverse = pair.map(x => (x._2,x._1))
pairReverse.foreach(println)
但是您尝试的上一个贴图将不起作用,即
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).reduceByKey(_+_)
val pairReverse = pair.map(X => ((1),(0)))
pairReverse.foreach(println)
因为它将为您拥有的每一对生成(1,0)元组
(1,0)
(1,0)
(1,0)
(1,0)
我希望答案是有帮助的只要从下一行中删除.foreach(println)
,就可以了
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).reduceByKey(_+_).foreach(println)
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).reduceByKey(_+_).foreach(println)
asforeach
是一个动作,返回unit()
foreach
定义如下
def foreach(f:T=>单位):单位
删除foreach()
后,以下内容应该对您有用
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).reduceByKey(_+_)
val pairReverse = input.map(pair => pair.swap)
pairReverse.foreach(println)
或
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).reduceByKey(_+_)
val pairReverse = pair.map(x => (x._2,x._1))
pairReverse.foreach(println)
但是您尝试的上一个贴图将不起作用,即
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).reduceByKey(_+_)
val pairReverse = pair.map(X => ((1),(0)))
pairReverse.foreach(println)
因为它将为您拥有的每一对生成(1,0)元组
(1,0)
(1,0)
(1,0)
(1,0)
我希望答案是有帮助的
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).reduceByKey(_+_).foreach(println)
这将返回Unit
,foreach(println)
使该对成为单元
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).reduceByKey(_+_)
// now print the pair rdd
pair.foreach(println)
//Now you can use it to swap using one of the following
pair.map(_.swap)
pair.map(x => (x._2,x._1))
pair.map(X => ((1),(0)))
因此,只需删除foreach(println)
,即可正常工作
这将返回Unit
,foreach(println)
使该对成为单元
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).reduceByKey(_+_)
// now print the pair rdd
pair.foreach(println)
//Now you can use it to swap using one of the following
pair.map(_.swap)
pair.map(x => (x._2,x._1))
pair.map(X => ((1),(0)))
因此,只需删除
foreach(println)
,并应按预期工作对
属于单元类型
,因为使用foreach
,因为它不是一个功能操作(其结果是单元
)。如果添加.map(X=>(X.\u 2,X.\u 1))
在foreach调用之前,如下所示:
(3,48784)
(10,47847)
(8,87673)
(4,67654)
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).
reduceByKey(_+_).map(X => (x._2,x._1)).foreach(println)
它应该可以工作。
对
属于单元
,因为使用了foreach
,因为它不是一个函数操作(它的结果是一个单元
)。如果在foreach
调用之前添加.map(X=>(X.\u2,X.\u1))
,如下所示:
(3,48784)
(10,47847)
(8,87673)
(4,67654)
val pair = input.map(line => line.split(" ") (2)).map(input => (input, 1)).
reduceByKey(_+_).map(X => (x._2,x._1)).foreach(println)
它应该可以工作。下面是使用
collect
交换每个元素的键、值对的方法
val map = Map(48784->3, 47847 -> 10, 87673 -> 8, 67654 -> 4)
map: scala.collection.immutable.Map[Int,Int] = Map(48784 -> 3, 47847 -> 10, 87673 -> 8, 67654 -> 4)
scala> map.collect{
case e => e._2 -> e._1
}
res0: scala.collection.immutable.Map[Int,Int] = Map(3 -> 48784, 10 -> 47847, 8 -> 87673, 4 -> 67654)
下面是使用
collect
val map = Map(48784->3, 47847 -> 10, 87673 -> 8, 67654 -> 4)
map: scala.collection.immutable.Map[Int,Int] = Map(48784 -> 3, 47847 -> 10, 87673 -> 8, 67654 -> 4)
scala> map.collect{
case e => e._2 -> e._1
}
res0: scala.collection.immutable.Map[Int,Int] = Map(3 -> 48784, 10 -> 47847, 8 -> 87673, 4 -> 67654)