【发布时间】:2020-08-27 09:21:26
【问题描述】:
我正在使用 pyspark 对两个表执行 join 的操作,这些表具有相对复杂的连接条件(在连接条件中使用大于/小于)。这工作正常,但只要我在加入前添加 fillna 命令就会崩溃。
代码如下所示:
join_cond = [
df_a.col1 == df_b.colx,
df_a.col2 == df_b.coly,
df_a.col3 >= df_b.colz
]
df = (
df_a
.fillna('NA', subset=['col1'])
.join(df_b, join_cond, 'left')
)
这会导致如下错误:
org.apache.spark.sql.AnalysisException: col1#6488,col2#4766,col3#4768,colx 中缺少已解决的属性 col1#4765 #4823,coly#4830,colz#4764 in operator !Join LeftOuter, (((col1#4765 = colx#4823) && (col2#4766 = coly#4830)) && (col3#4768 >= colz#4764))。具有相同名称的属性出现在操作中:col1。请检查是否使用了正确的属性。
在执行fillna 之后,spark 似乎不再识别col1。 (如果我将其注释掉,则不会出现错误。)问题是我确实需要该声明。 (总的来说,我已经大大简化了这个例子。)
我查看了this question,但这些答案对我不起作用。具体来说,在 fillna 之后使用 .alias('a') 不起作用,因为 spark 无法识别连接条件中的 a。
有人可以:
- 准确解释为什么会发生这种情况以及我以后如何避免这种情况?
- 请告诉我解决方法?
提前感谢您的帮助。
【问题讨论】:
-
修改了这么多列,搞不清楚。
标签: apache-spark pyspark