【发布时间】:2018-06-15 17:57:12
【问题描述】:
在 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|
# +----+----+
我需要对其进行解构,然后在列上执行一个空安全等于以进行比较并将其重新组合在一起。这是执行此操作的代码。 (它可以粘贴并按原样运行,在 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。 (注意,不能使用 pandas)
【问题讨论】:
-
另外,这对我有用:return (right.id == left.id_2) | (right.id.isNull() & left.id_2.isNull())
标签: python apache-spark dataframe pyspark