等价于Spark中可用的熊猫中的combin_first?

时间:2018-07-23 20:57:56

标签: apache-spark dataframe

在满足某些条件时,我正在尝试用另一个DataFrame更新。

combine_first pandas中的DataFrame函数运行良好。 Spark中是否有等效方法可以有效地更新DataFrame

1 个答案:

答案 0 :(得分:0)

没有严格的等效项,但是如果您有一个公用密钥,则可以加入并合并:

from pyspark.sql.functions import coalesce, col, isnan, when

keys = ["index"]

df1 = pd.DataFrame([[1, np.nan]])
df2 = pd.DataFrame([[3, 4]])

sdf1 = spark.createDataFrame(df1.reset_index()).alias("df1")
sdf2 = spark.createDataFrame(df2.reset_index()).alias("df2")


def first_of(c1, c2):
    return coalesce(when(~isnan(c1), c1), when(~isnan(c2), c2))


sdf1.join(sdf2, keys, "fullouter").select(keys + [
    first_of(sdf1[c], sdf2[c]).alias(c) for c in sdf1.columns if c not in keys
]).show()

# +-----+---+---+
# |index|  0|  1|
# +-----+---+---+
# |    0|  1|4.0|
# +-----+---+---+