Scala火花贴图类型匹配问题

Scala火花贴图类型匹配问题,scala,apache-spark,Scala,Apache Spark,我试图用Scala对日志数据执行一系列转换,但在匹配元组时遇到了困难。我有一个带有用户ID、URL和日期的数据框。我可以将数据帧映射到RDD,并使用此映射按键进行缩减: val countsRDD = usersUrlsDays.map { case Row(date:java.sql.Date, user_id:Long, url:String) => Tuple2(Tuple2(user_id, url), 1) }.rdd.reduceByKey(_+_) 这给了我一个RDD((用

我试图用Scala对日志数据执行一系列转换,但在匹配元组时遇到了困难。我有一个带有用户ID、URL和日期的数据框。我可以将数据帧映射到RDD,并使用此映射按键进行缩减:

val countsRDD = usersUrlsDays.map { case Row(date:java.sql.Date, user_id:Long, url:String) => Tuple2(Tuple2(user_id, url), 1) }.rdd.reduceByKey(_+_)
这给了我一个RDD((用户id,url),count):

现在,我想通过url将其倒置,以产生:

(url, [(user_id, count), ...])
我试过这个:

val urlIndex = countsRDD.map{ case Row(((user_id:Long, url:String), count:Int)) => Tuple2(url, List(Tuple2(user_id, count))) }.reduceByKey(_++_)
但是,这会产生匹配错误:

 scala.MatchError: ... (of class scala.Tuple2)

我用显式和隐式类型尝试了这两个映射调用的许多不同排列,这似乎让我走得最远。我希望这里有人能帮我指出正确的方向。

类似的方法应该会奏效:

countsRDD
.map{case((用户id,url),计数)=>(url,(用户id,计数))}
.groupByKey
  • countsRDD
    RDD[(字符串,字符串,Int)]
    不是
    RDD[行]
  • 不需要使用
    TupleN
    。元组文字可以正常工作
  • 由于
    countsRDD
    是静态类型的(与
    RDD[Row]
    不同),因此不必指定类型
  • 不要将
    reduceByKey
    用于列表连接。这是你可能采取的最糟糕的方法,忽略了计算复杂性、垃圾收集器和常识如果您确实需要分组数据,请使用专门为其设计的操作

类似的方法应该会奏效:

countsRDD
.map{case((用户id,url),计数)=>(url,(用户id,计数))}
.groupByKey
  • countsRDD
    RDD[(字符串,字符串,Int)]
    不是
    RDD[行]
  • 不需要使用
    TupleN
    。元组文字可以正常工作
  • 由于
    countsRDD
    是静态类型的(与
    RDD[Row]
    不同),因此不必指定类型
  • 不要将
    reduceByKey
    用于列表连接。这是你可能采取的最糟糕的方法,忽略了计算复杂性、垃圾收集器和常识如果您确实需要分组数据,请使用专门为其设计的操作
 scala.MatchError: ... (of class scala.Tuple2)