Spark(Scala)sqlDataFrame联接不按预期工作

时间:2016-06-22 08:47:52

标签: scala apache-spark spark-dataframe

我以为我知道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|
+--------------+--------+

1 个答案:

答案 0 :(得分:1)

所以问题确实是UserDataFrame中重复键的问题。 问题是我在用户rdd上使用了.distinct(),它有(k,v)元组,我认为distinct()只用于键,但它考虑了整个元组,这使我在创建的数据帧中有重复键从那个rdd。

感谢您的帮助。