我在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),或者有关列中可能存在的列/数据的任何特定字符的任何提示引起这个......