G.S*_*leh 2 scala apache-spark
假设这些是我的CSV文件:
11111;44444
22222;55555
11111;44444
33333;99999
11111;77777
22222;99999
Run Code Online (Sandbox Code Playgroud)
我希望第一列中出现的次数与第二列的值不同.像这样 :
(11111,2)
(22222,2)
(33333,1)
Run Code Online (Sandbox Code Playgroud)
我试过了:
object CountDestOcc {
def main(args: Array[String]) {
val conf = new SparkConf()
.setAppName("Word Count")
.setMaster("local")
val sc = new SparkContext(conf)
//loading text file into textFile object .(RDD)
val textFile = sc.textFile(args(0))
val appsdest = textFile.flatMap (line => line.split(" ")).map(p=>(p,1)).reduceByKey(_+_).collect()
appsdest.foreach(println)
sc.stop()
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
(22222;55555,1)
(22222;99999,1)
(11111;77777,1)
(11111;44444,2)
(33333;99999,1)
Run Code Online (Sandbox Code Playgroud)
我怎样才能用第一把键巩固以获得预期的结果?
我可能只计算不同的值.
textFile.distinct() // remove all duplicate key;value pairs
.map( line => line.split(";")(0) ) // extract the keys
.map( k => (k,1) ) // convert to countable tuples
.reduceByKey(_+_) // count keys
Run Code Online (Sandbox Code Playgroud)
逐步地,将发生以下情况
假设输入是:
11111;44444
22222;55555
11111;44444
33333;99999
11111;77777
22222;99999
Run Code Online (Sandbox Code Playgroud)
distinct() 输入变为:
11111;44444
22222;55555
33333;99999
11111;77777
22222;99999
Run Code Online (Sandbox Code Playgroud)
.map( line => line.split(";")(0) )和.map( k=> (k,1) )(或 .map( line => (line.split(";")(0),1) )在一张地图中)输入变为:
11111,1
22222,1
33333,1
11111,1
22222,1
Run Code Online (Sandbox Code Playgroud)
reduceByKey(_+_)事情总结如下:
11111,2
22222,2
33333,1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1625 次 |
| 最近记录: |