gpt4 book ai didi

python - Dataframe Spark 2.2.1 上的可调用列对象

转载 作者:行者123 更新时间:2023-12-01 01:49:23 24 4
gpt4 key购买 nike

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)

最佳答案

eqNullSafe 已包含在 Spark 2.3 ( SPARK-20290 ) 中,因此您将无法在 2.2 中使用它。

有不同的替代方案(SQL/DataFrame)可用:

  • id1 与 id 不同/expr("id 与 id2 不同")(Spark 2.2 或更高版本)
  • ((id1 IS NULL) AND (id2 IS NULL)) OR (id1 = id2)/((col("id1").isNull() & col("id2") ").isNull()) | (col("id1") == col("id2"))

如果可用,应首选第一个。

参见Including null values in an Apache Spark Join

关于python - Dataframe Spark 2.2.1 上的可调用列对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50880579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com