我的文字文件格式为: 文件:
1|52|3956|337.0 1|77|4069|357.8 1|7|14|35.2 2|3|8895|378.4 2|3|4969|915.2 2|3|8539|438.3 2|78|3025|306.3
可运行代码
val file = sc.textFile("path")
val filtered = file.filter(line=> (line.split('|')(2)<args(1)) && (line.split('|')(3))>args(2))
val count= filtered.map(line=> (line.split('|')(0),line.split('|')(1))).distinct.countByKey
val sum= filtered.map(line=> (line.split('|')(0),line.split('|')(2).toInt*(line.split('|')(3).toFloat))).reduceByKey((a,b)=>a+b)
val result= count.join(sum)
我尝试加入以上两个但是我收到了这个错误:
value join不是scala.collection.Map [String,Long]
的成员
有谁知道如何解决这个问题?
答案 0 :(得分:1)
在您的代码count
中,Map[String,Long]
类型为sum
,RDD[(String, Long)]
为join
。您收到的错误表明没有为Map[String,Long]
类型定义count
。因此,要解决此问题,您可以将val count: RDD[(String, Int)] = filtered.map(line => (line.split('|')(0), line.split('|')(1))).distinct.map(x => (x._1, 1)).reduceByKey(_ + _)
更改为
count
现在RDD[(String, Int)]
属于join
类型,您可以{/ 1}}将其count.join(sum)
应用于其中
RDD[(String, (Int, Long))]
属于{{1}}
类型