在Spark 2.2.1版中,这个调用的等价物是什么:
df.column_name.eqNullSafe(df2.column_2)
(
df.column_name
不可调用。它在2.3.0中工作,但在2.2.1中,我得到错误:
TypeError: 'Column' object is not callable
)
这里有一个复制的例子。我有一个示例数据框:
# +----+----+
# | id| var|
# +----+----+
# | 1| a|
# | 2|null|
# |null| b|
# +----+----+
我需要对它进行解构,然后在列上执行一个空的safe equals来进行比较并将其放回一起。这就是代码。(它可以按原样粘贴和运行,在2.3.0中工作,在2.2.1中复制错误)
df = spark.createDataFrame(
[
('1', 'a'),
('2', None),
(None, 'b')
],
('id', 'var')
)
def get_condition(right, left):
return right.id.eqNullSafe(left.id_2)
right_df = df.select(df.columns[:1])
left_df = df.filter(df.var.isNotNull()).withColumnRenamed('id', 'id_2')
result = right_df.join(left_df, get_condition(right_df, left_df), how='left')
result.select('id', 'var').show()
我想修改get_condition方法的调用,以使用列的可调用版本来调用eqnullsafe。(注意,不能使用熊猫)