Scala火花贴图类型匹配问题
我试图用Scala对日志数据执行一系列转换,但在匹配元组时遇到了困难。我有一个带有用户ID、URL和日期的数据框。我可以将数据帧映射到RDD,并使用此映射按键进行缩减: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((用
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)