我以为我知道sql加入,但现在我不太确定。 我有一个带有电影评级的数据框和另一个带有userIds及其索引的数据框。我想加入两个数据帧,这样我就可以获得每个电影评级的相应用户索引。然而,在加入表格之后,我得到的记录比我之前的记录更多,这对我来说毫无意义。我希望得到相同数量的记录,但是有一个额外的u_number列: 我的第一个想法是使用左连接,其中ratingsDf为左,userDataFrame为右,但我尝试的任何连接都得到了不希望的结果。
我用于连接的命令:
val ratingsUsers = ratingsDf.join(userDataFrame, ratingsDf("uid") === userDataFrame("uid"),"left" )
这些是表格:
scala> ratingsDf.show(5)
+--------------+----------+------+
| uid| mid|rating|
+--------------+----------+------+
|A1V0C9SDO4DKLA|B0002IQNAG| 4.0|
|A38WAOQVVWOVEY|B0002IQNAG| 4.0|
|A2JP0URFHXP6DO|B0002IQNAG| 5.0|
|A2X4HJ26YWTGJU|B0002IQNAG| 5.0|
|A3A98961GZKIGD|B0002IQNAG| 5.0|
+--------------+----------+------+
scala> userDataFrame.show(5)
+--------------+--------+
| uid|u_number|
+--------------+--------+
|A10049L7AJW9M7| 0|
|A1007G0226CSWC| 1|
|A100FQCUCZO2WG| 2|
|A100JCBNALJFAW| 3|
|A100K3KEMSVSCM| 4|
+--------------+--------+
答案 0 :(得分:1)
所以问题确实是UserDataFrame中重复键的问题。 问题是我在用户rdd上使用了.distinct(),它有(k,v)元组,我认为distinct()只用于键,但它考虑了整个元组,这使我在创建的数据帧中有重复键从那个rdd。
感谢您的帮助。