apache-spark - 加入期间的意外行为(仅在将列 'year' 重命名为 'year' 时才有效)否则将失败并显示“package.TreeNodeException:执行树”
问题描述
我有一个火花数据框,经过多次转换后需要与其父数据框之一连接。除非我将列“年份”重命名为“年份”,否则此连接将失败。我之前也遇到过这种行为,在 6-7 次转换后,需要将数据框与第 3 次转换的输出连接起来。
我不明白为什么会这样,所以我尝试了一些随机的事情,比如持久化,尝试使用 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 并不太了解这里发生了什么,所以任何帮助将不胜感激
这也是我第一次发帖,所以欢迎任何关于如何更好地格式化问题的指示。
解决方案
错误。我只是重命名。这是痛苦的。
请参阅如何解决 AnalysisException:Spark 中的已解析属性。其他场景也是如此。
另外如何在加入后重命名重复的列?. 在这方面关于SO的很多事情。
仍然使用最新版本的 Spark 2.4。
推荐阅读
- python - 如何计算两条线之间的距离?
- ios - 如何使用核心图形将像线段这样的文本弯曲成圆形?
- wpf - 添加 MaterialDesign 扩展器
- java - 为什么我使用 jstat 命令时“MC”大于“MU”?
- sql - 循环遍历一个表的借方金额以查找与贷方金额匹配的另一个表
- abp - 在 abp 框架中找不到自定义 404 页面
- swift - 如何使用 swift 的 DateComponentsFormatter 修改带有“位置”选项的格式化字符串
- git - 创建多分支管道时如何限制多分支管道作业不触发构建
- optimization - 总和上限和下限的约束是变量 - 我该如何重新制定它?
- python - 使用 for 循环创建图像(灰度)直方图