Join 期间的意外行为(仅在将列 'year' 重命名为 'year' 时有效)否则失败并显示 "package.TreeNodeException: execute tree"

Unexpected behavior during Join (only works if rename column 'year' as 'year' ) otherwise fails with "package.TreeNodeException: execute tree"

我有一个 spark 数据框,经过多次转换后需要与其父数据框之一连接。此连接失败,除非我将列 'year' 重命名为 'year'。在 6-7 次转换后,数据框需要与第三次转换的输出连接时,我也遇到过这种行为。

我不明白为什么会这样,所以我尝试了一些随机的事情,比如坚持,尝试使用 spark sql API 而不是 pyspark,但仍然遇到了同样的问题。在 spark sql 的情况下,连接在重命名具有相同名称的列后工作

由于某些限制,我无法共享代码,但一般代码流程是这样的

  DF =  spark.read(.......)

  subset DF

  df1 = transformation1 on DF 
  df2 = transformation2 on df1

  Subset df2
  df3 = transformation3 on df2

  #this fails 
  final = df2.alias('a').join(  df3.alias('b'),[conditon],'left').select('a.*')

  #this succeeds
  final = df2.withColumnRenamed('Year','Year').alias('a).join(  df3.alias('b'),[conditon],'left').select('a.*')

我无法提供堆栈跟踪,但会弹出类似这样的内容

     package.TreeNodeException: execute tree:

          Exhange hashpartitioning(.....)

                  remaining logical plan 

我最近才开始使用 spark,并不真正理解这里发生了什么,所以任何帮助将不胜感激

这也是我第一次发帖,所以欢迎任何关于如何更好地格式化问题的指示。

错误。我只是重命名。很痛苦。

参见。其他场景也是如此。

还有。 SO这方面的东西很多。

仍然使用最新版本的 Spark 2.4。