当前位置: 首页 > 知识库问答 >
问题:

PySpark DataFrame-动态连接多列

柏麒
2023-03-14

假设我在Spark上有两个数据帧

firstdf = sqlContext.createDataFrame([{'firstdf-id':1,'firstdf-column1':2,'firstdf-column2':3,'firstdf-column3':4}, \
{'firstdf-id':2,'firstdf-column1':3,'firstdf-column2':4,'firstdf-column3':5}])

seconddf = sqlContext.createDataFrame([{'seconddf-id':1,'seconddf-column1':2,'seconddf-column2':4,'seconddf-column3':5}, \
{'seconddf-id':2,'seconddf-column1':6,'seconddf-column2':7,'seconddf-column3':8}])

现在,我想通过多个列(任何大于1的数字)连接它们

我拥有的是第一个数据帧的列数组和第二个数据帧中的列数组,这些数组具有相同的大小,我希望通过这些数组中指定的列进行连接。例如:

columnsFirstDf = ['firstdf-id', 'firstdf-column1']
columnsSecondDf = ['seconddf-id', 'seconddf-column1']

因为这些数组大小可变,所以我不能使用这种方法:

from pyspark.sql.functions import *

firstdf.join(seconddf, \
    (col(columnsFirstDf[0]) == col(columnsSecondDf[0])) &
    (col(columnsFirstDf[1]) == col(columnsSecondDf[1])), \
    'inner'
)

是否有任何方法可以动态连接多个列?

共有2个答案

拓拔俊艾
2023-03-14

@Mohan对不起,我没有做“添加评论”的名声。在两个数据帧上有相同的列,用这些列创建列表并在连接中使用

col_list=["id","column1","column2"]
firstdf.join( seconddf, col_list, "inner")
管峻
2023-03-14

为什么不使用简单的理解:

firstdf.join(
    seconddf, 
   [col(f) == col(s) for (f, s) in zip(columnsFirstDf, columnsSecondDf)], 
   "inner"
)

由于您使用的是逻辑,因此提供一个不带<code>的条件列表就足够了

 类似资料:
  • 问题内容: 我有一个使用JPA 2的相当标准的Java EE6 Web应用程序,并且具有依赖关系注入连接到MySQL数据库,并且一切正常。我现在想做的是让该应用程序与我们在客户端站点上安装的其他应用程序的数据库交互- 本质上充当我们其他应用程序安装的一个控制点。 我正在努力的是如何最好地与其他数据库进行交互。理想情况下,我想为每个安装创建一个EntityManager并使用JPA进行交互,但是我看

  • 致: 我怎么能这么做?

  • 技巧 有人问我,如何通过选项来指定动态连接器,而不使用缺省系统自带的动态连接器。我后来查了下ld的手册,有这么一个选项: -Ifile --dynamic-linker=file Set the name of the dynamic linker. This is only meaningful when generating dynamically linked ELF ex

  • 问题内容: 我正在Laravel 5(.1)中创建一个应用程序,在该应用程序中需要连接到不同的数据库。唯一的问题是,它不知道必须连接到哪个数据库,因此无法在config中使用database.php。控制器负责使用动态给定的连接详细信息进行连接。 如何建立与数据库的新连接,包括使用DB类?(或者这可能) 提前致谢! 问题答案: 最简单的解决方案是在运行时设置数据库配置。Laravel可能希望从文件

  • 问题内容: 对于我的应用程序,我需要在运行时进行动态数据库连接。我知道,有多种方法可以创建多个数据源,但我认为它们并不是那么动态。设想: 用户可以输入数据库凭据并连接到远程数据库,以将单个行和表导入另一个数据库。为此,我需要动态连接到远程数据库。 我试图在服务中做到这一点,就像他们在“如果在grails中使用groovy sql类”中 所说的那样,它是否使用grails连接池? 注意:在这种情况下

  • 我试图从动态表和基于某些字段的流中派生新表。 有没有人能为你提供最好的指导。我对flink和尝试新事物是陌生的。 书籍 ============================ BookId, Instruments, Quantity Book1, Goog,100 Book2, Vod,10 Book1, Appl,50 Book2, Goog,60 Book1, Vod,130 Book3,