scala – Spark SQL执行carthesian join而不是inner join
发布时间:2020-12-16 09:03:32 所属栏目:安全 来源:网络整理
导读:在尝试执行一些早期计算后,我试图将两个DataFrame相互连接起来.命令很简单: employee.join(employer,employee("id") === employer("id")) 但是,连接似乎执行了carthesian join,完全忽略了我的===语句.有谁知道为什么会这样? 解决方法 我想我也遇到了同样的
在尝试执行一些早期计算后,我试图将两个DataFrame相互连接起来.命令很简单:
employee.join(employer,employee("id") === employer("id")) 但是,连接似乎执行了carthesian join,完全忽略了我的===语句.有谁知道为什么会这样? 解决方法
我想我也遇到了同样的问题.检查您是否有警告:
Constructing trivially true equals predicate [..] 创建连接操作后.如果是这样,只需为员工或雇主DataFrame中的一列添加别名,例如像这样: employee.select(<columns you want>,employee("id").as("id_e")) 然后执行员工加入(“id_e”)===雇主(“id”). 说明. 如果直接使用DataFrame A计算DataFrame B并将它们连接在来自DataFrame A的列Id上,则不会执行您想要执行的连接. DataFrameB中的ID列实际上是DataFrameA中完全相同的列,因此spark将断言该列与其自身相等,因此是一个简单的真正谓词. def === (other: Any): Column = { val right = lit(other).expr if (this.expr == right) { logWarning( s"Constructing trivially true equals predicate,'${this.expr} = $right'. " + "Perhaps you need to use aliases.") } EqualTo(expr,right) } 对我来说这不是一个非常好的解决方案(很容易错过警告信息),我希望这会以某种方式修复. 你很幸运能看到警告信息,it has been added not so long ago;). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读