要运行学习spark中给出的一些简单的spark转换,我需要创建一对rdd
(例如:{(1,2),(3,4),(3,6)})
创建这个的最佳方法是什么,这样我就可以在上面使用groupbykey()等。我试着把它放在一个文件中,并阅读下面的代码,但有些人认为这是行不通的
文本文件内容
1 2
3 4
3 6
代码
val lines = sc.textFile("path_to_file")
val pairs = lines.map(x => (x.split(" ")(0), x))
pairs.foreach(println)
打印如下
scala> pairs.foreach(println)
(1,1 2)
(3,3 4)
(3,3 6)
当我想要它的时候
1 2
3 4
3 6
在scala有没有更简单的方法?
4条答案
按热度按时间gopyfrb31#
基于关键字和值的索引拆分文本文件内容,以生成一对rdd。
a9wyjsp72#
谢谢大家的回复,这是对我有效的解决方案
val lines=sc.textfile(“文件路径”)
val pairs=lines.keyby(line=>(line.split(“”(0))).mapvalues(line=>line.split(“”(1).trim.toint)
pairs.reducebykey((x,y)=>x+y).foreach(println)
scala>pairs.reducebykey((x,y)=>x+y).foreach(println)
(3,10)
(1,2)
jslywgbw3#
试试这个:
注意:如果希望值是数字而不是
String
,只需添加类型转换(.toInt
,.toDouble
等等)。3wabscal4#
您可以使用以下方法
val pairs=lines.flatmap(x=>x.split(“\n”))
祝你好运!