如何使用来自另一个数据框的新值更新pyspark数据框?

如何使用来自另一个数据框的新值更新pyspark数据框?,第1张

如何使用来自另一个数据框的新值更新pyspark数据框?

这与用新值更新数据框列密切相关,除了您还想添加数据框B中的行。一种方法是首先执行链接的问题中概述的 *** 作,然后将结果与数据框B合并并删除重复。

例如:

dfA.alias('a').join(dfB.alias('b'), on=['col_1'], how='left')    .select(        'col_1',        f.when( ~f.isnull(f.col('b.col_2')), f.col('b.col_2')        ).otherwise(f.col('a.col_2')).alias('col_2'),        'b.col_3'    )    .union(dfB)    .dropDuplicates()    .sort('col_1')    .show()#+-----+-----+-----+#|col_1|col_2|col_3|#+-----+-----+-----+#|    a|  wew|    1|#|    b|  eee| null|#|    c|  rer|    3|#|    d|  yyy|    2|#+-----+-----+-----+

如果您有很多要替换的列并且不想对它们全部进行硬编码,则可以更一般地使用列表推导

cols_to_update = ['col_2']dfA.alias('a').join(dfB.alias('b'), on=['col_1'], how='left')    .select(        *[ ['col_1'] +  [     f.when(         ~f.isnull(f.col('b.{}'.format(c))),         f.col('b.{}'.format(c))     ).otherwise(f.col('a.{}'.format(c))).alias(c)     for c in cols_to_update ] +  ['b.col_3']        ]    )    .union(dfB)    .dropDuplicates()    .sort('col_1')    .show()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4918677.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存