Spark Sql join - 在某个列上加入时有效,在其他列上加入时不起作用

时间:2017-08-16 15:37:03

标签: join apache-spark-sql

我在sql server中有2个表,A和B.这是架构

Table A (
  col1 varchar(20) not null, --is an FK to another table (NOT Table B)
  col2 varchar(20) not null, --is the PK
  .
  .
  .
  other columns
)

Table B (
  col1 varchar(20) not null,
  col2 varchar(20) not null,
  .
  .
  .
  other columns
)

我从两个表中创建数据帧并加入它们。

A.join(B, A("col1") === B("col1"))  works fine
A.join(B, A("col2") === B("col2"))  gives no rows

此行为是一致的。但是,执行sql查询会在两种情况下都会产生结果。

在检查日志时,我发现对于失败案例,在DAGScheduler完成其工作之后,ClosureCleaner开始并将事情搞砸了。 在成功的案例中,ClosureCleaner此时并未启动。

失败案例:

  

INFO org.apache.spark.scheduler.DAGScheduler - 作业0完成:在TestEventJoins.scala展示:65,耗时12.504064 s

     

DEBUG org.apache.spark.util.ClosureCleaner - +++清理闭包(org.apache.spark.sql.execution.SparkPlan $$ anonfun $ 3)+++

成功案例:

  

INFO org.apache.spark.scheduler.DAGScheduler - 作业0完成:在TestEventJoins.scala展示:65,花了13.523901 s

     

DEBUG org.apache.spark.sql.catalyst.expressions.codegen.GenerateSafeProjection - createexternalrow的代码.....

有关此处发生的事情以及如何使其发挥作用的任何帮助?

我担心我无法提供可验证的例子。我试图用样本表重现这个,但不能。我不能让你访问所说的表:(。

如果有人可以帮助我理解ClosureCleaner在这个特殊情况下的启动(我已经通过this),或者有关列中可能存在的列/数据的任何特定字符的任何提示引起这个......

0 个答案:

没有答案