Dataframe Spark 2.2.1上的可调用列对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dataframe Spark 2.2.1上的可调用列对象相关的知识,希望对你有一定的参考价值。
在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|
# +----+----+
我需要解构它,然后对列进行null-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。 (注意,不能使用熊猫)
eqNullSafe
已包含在Spark 2.3(SPARK-20290)中,因此您将无法在2.2中使用它。
有不同的替代方案(SQL / DataFrame
):
id1 IS NOT DISTINCT FROM id
/expr("id IS NOT DISTINCT FROM 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
以上是关于Dataframe Spark 2.2.1上的可调用列对象的主要内容,如果未能解决你的问题,请参考以下文章
spark 2.3.1 上的 dataframe,Describe() 函数抛出 Py4JJavaError
1.Spark SQL基础—Spark SQL概述Spark SQL核心编程—DataFrameDataSet
带有浮点数 Spark 1.6 的 DataFrame 上的 SQL 百分位数 - 任何可能的解决方法? [复制]
使用 Scala 将多列转换为 Spark Dataframe 上的一列地图