我有两个Spark数据框:

数据框A:

|col_1 | col_2 | ... | col_n |

|val_1 | val_2 | ... | val_n |

和数据框B:

|col_1 | col_2 | ... | col_m |

|val_1 | val_2 | ... | val_m |

数据框B可以包含来自数据框A的重复行,更新行和新行.我想在spark中编写操作,在其中可以创建一个新数据框,其中包含数据框A的行以及数据框B的更新行和新行.

我从创建仅包含不可更新列的哈希列开始.这是唯一的ID.因此,假设col1和col2可以更改值(可以更新),但是col3,..,coln是唯一的.我创建了一个哈希函数作为hash(col3,.. coln):

A=A.withColumn("hash", hash(*[col(colname) for colname in unique_cols_A]))

B=B.withColumn("hash", hash(*[col(colname) for colname in unique_cols_B]))

现在,我想编写一些火花代码,基本上从B中选择哈希值不在A中的行(因此,新行和更新后的行),并将它们与A中的行一起加入新的数据帧中. pyspark?

编辑:

数据框B可以有来自数据框A的额外列,因此无法进行联合.

样例

数据框A:

+-----+-----+

|col_1|col_2|

+-----+-----+

| a| www|

| b| eee|

| c| rrr|

+-----+-----+

数据框B:

+-----+-----+-----+

|col_1|col_2|col_3|

+-----+-----+-----+

| a| wew| 1|

| d| yyy| 2|

| c| rer| 3|

+-----+-----+-----+

结果:

数据框C:

+-----+-----+-----+

|col_1|col_2|col_3|

+-----+-----+-----+

| a| wew| 1|

| b| eee| null|

| c| rer| 3|

| d| yyy| 2|

+-----+-----+-----+

解决方法:

这与update a dataframe column with new values密切相关,除了您还想添加DataFrame B中的行.一种方法是首先执行链接的问题中概述的操作,然后将结果与DataFrame 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()

标签:python,pyspark

python更改数据框指定位置的数据_python-如何使用来自另一个数据框的新值更新pyspark数据框?...相关推荐

  1. python处理表格数据-python读取word 中指定位置的表格及表格数据

    1.Word文档如下: 2.代码 # -*- coding: UTF-8 -*- from docx import Document def readSpecTable(filename, specT ...

  2. 将数据的指定位置置位

    将数据的指定位置置位 引言 实现过程 如何实现数组形式的数据的置位 函数的封装 扩展 结语 引言 在C语言的编程下,我们会经常遇到将数据的某一位置为0或者1的情况,在常用数据(char.int.lon ...

  3. python删除指定位置的字符串_python去除区域 python删除字符串中指定位置字符

    python删除字符串中指定位置字符 原程序是这样的: ser = serial.Serial("/dev/ttyAMA0", 9600) def main字符串的话,你可以把他当 ...

  4. python指定位置写入文件_Python从文件中读取指定的行以及在文件指定位置写入

    Python从文件中读取指定的行 如果想根据给出的行号, 从文本文件中读取一行数据, Python标准库linecache模块非常适合这个任务: 测试文件内容 : This is line 1. Th ...

  5. Python向DataFrame中指定位置添加一列或多列

    对于这个问题,相信很多人都会很困惑,本篇文章将会给大家介绍一种非常简单的方式向DataFrame中任意指定的位置添加一列. 在此之前或许有不少读者已经了解了最普通的添加一列的方式,如下: import ...

  6. 使用Python在Excel表指定位置插入多列并赋值

    在指定位置插入多列并赋值 在做数据预处理时有这个需求,查询众多文章发现常用insert()函数以及concat(),但是concat只能在插在Excel表尾部,无法插入指定位置: insert()函数 ...

  7. python替换指定位置word图片_用Python在word的指定位置插入图片(使用Python-docx包)...

    1 2 首先,本实例是采用java语言的,需要进行xml操作,至于poi,docx4j这些,因为感觉不是文档不太好,要嘛就是操作不方便,而且英文就算了,主要是注释很少,让人云里雾里的.所以,嘿嘿,直接 ...

  8. Python在word文件指定位置中插入其他word文件内容的代码

    以下是在 Python 中插入另一个 word 文件内容到指定位置的代码: import docxdef insert_word_doc(main_doc, insert_doc, start, en ...

  9. python找出文本的位置和替换_python查找文本文档中特定间隔位置的字符并替换

    实际工作中,从数据库里导出了几万条IMEI到excel中,现在需要把这些IMEI每40个分一组,保存在txt文档中,方便进行性能测试时调用. 1.excel中的IMEI以常规格式显示了,虽然内容是15 ...

最新文章

  1. 如何更高效的管理原生微服务应用
  2. 2021年春季学期-信号与系统-第十二次作业参考答案
  3. ubuntu10.04 解决打开windows记事本.txt文件乱码的方法
  4. Android网络服务发现(NSD)协议的使用
  5. Wireshark EndPoints窗口
  6. python安装mysql数据库_windows10安装mysql-8.0.13(zip安装)~Python安装mysql
  7. nodejs字符与字节之间的转换
  8. 进程间的六种通信方式
  9. c form画直线_初一数学线段、射线、直线知识点精讲
  10. REST是否会步SOAP的后尘?
  11. 电子书下载:深入解析Windows操作系统第6版 Windows Internals 6th Part1, Part2
  12. java中常用的设计模式(*)
  13. 非平稳序列的随机分析
  14. 通达oa php_【通达OA】办公就用通达OA,通达OA官方网站_OA系统_协同办公
  15. 微信社群运营是什么,如何做好社群运营?
  16. 苹果应用商店AppStore审核规则指南
  17. 上海市政府颁布智能汽车牌照,蔚来汽车成首批获此资格企业
  18. 梦回山海推广码jn0010 梦回山海推广码
  19. 分立元器件--电阻的特性以及工程使用注意事项
  20. 生成树协议(RTP、RSTP、MSTP)

热门文章

  1. 6.1Python文件的操作(一)
  2. laravel常用命令整理
  3. 阿里云HBase推出全新X-Pack服务 定义HBase云服务新标准...
  4. web服务端的架构演变
  5. Redis 优势以及性能问题
  6. content的定义
  7. Ubuntu 9.04 死机处理(Linux死机处理)
  8. python,无网、没网、生成环境迁移安装环境,支持virtualenv
  9. Linux centosVMware shell编程 for循环、while循环、break跳出循环、continue结束本次循环、exit退出整个脚本...
  10. .Net语言 APP开发平台——Smobiler学习日志:如何设置页面的title