微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

加入 RDD leftOuterJoin - 错误:类型不匹配

如何解决加入 RDD leftOuterJoin - 错误:类型不匹配

尝试使用 leftOuterJoin 连接两个不同大小的 RDD。已经用其他类似的 RDD 解决了这个问题,但由于某种原因,我现在收到了这个错误

type mismatch;
[error]  found   : org.apache.spark.rdd.RDD[(Int,Int,Double,AnyVal)]
[error]  required: org.apache.spark.rdd.RDD[(Int,?)]

带有指向对象 userScaleBack 的箭头(具有“发现”错误的结构):

val userProdItemScale = itemAverages.leftOuterJoin(userScaleBack)

如您所见,对象包含元组和 5 元组,它们的计数分别为 1650 和 80000。最左边元素中的所有值在两个对象之间共享,因此应该将 ?-值连接到较大对象中 leftOuterJoin 匹配的所有位置。对象的内容如下所示:

userScaleBack
(1053,451,2.7362637362637363,0.011609034023077685,2.2637362637362637)
(466,0.052013404418021464,2.2637362637362637)

itemAverages
(1053,3.473684210526316)
(466,3.4390243902439024)

解决方法

您需要将 userScaleBack 的类型更改为 RDD[(Int,?)],即具有两个元素的元组的 RDD。您可以使用 keyBy 来执行此操作:

val userProdItemScale = itemAverages.leftOuterJoin(userScaleBack.keyBy(_._1))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。