如何在SPARK(scala)中使用join

时间:2018-04-23 21:02:22

标签: scala apache-spark

我的文字文件格式为: 文件:

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]

的成员

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

在您的代码count中,Map[String,Long]类型为sumRDD[(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}}

类型