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

连接两个连接键不同的数据框架,并且只选择一些列

越勇
2023-03-14

我想做的是:

使用两个数据帧 AB 各自的 ida_idb_id连接它们。我想从A中选择所有列,从B中选择两个特定列

我尝试了类似于我在下面用不同引号写的东西,但仍然不起作用。我觉得在pyspark中,应该有一种简单的方法来做到这一点。

A_B = A.join(B, A.id == B.id).select(A.*, B.b1, B.b2)

我知道你可以写作

A_B = sqlContext.sql("SELECT A.*, B.b1, B.b2 FROM A JOIN B ON A.a_id = B.b_id")

这样做,但我想更像上面的伪代码。

共有3个答案

雍马鲁
2023-03-14

我认为更简单的解决方案是用您想要的选定列将表A连接到表B。下面是实现这一点的示例代码:

joined_tables = table_A.join(table_B.select('col1', 'col2', 'col3'), ['id'])

上面代码连接了table_A中的所有列和table_B中的列“col1”、“col2”、“col3”

成和悌
2023-03-14

尝试此解决方案:

A_B = A.join(B,col('B.id') == col('A.id')).select([col('A.'+xx) for xx in A.columns]
      + [col('B.other1'),col('B.other2')])

SELECT中的下面几行发挥了从表A中选择所有列和从表B中选择2列的技巧。

[col('a.'+xx) for xx in a.columns] : all columns in a

[col('b.other1'),col('b.other2')] : some columns of b
松博耘
2023-03-14

您的伪代码基本上是正确的。如果两个DataFrames中都存在id列,则此稍微修改的版本将起作用:

A_B = A.join(B, on="id").select("A.*", "B.b1", "B.b2")

pyspark.sql.DataFrame.join()的文档中:

如果< code>on是指示联接列名称的字符串或字符串列表,则列必须存在于两端,这将执行等同联接。

由于键是不同的,因此您只需与列()(与列姆Renamed())一起使用即可在两个数据帧中创建具有相同名称的列:

A_B = A.withColumn("id", col("a_id")).join(B.withColumn("id", col("b_id")), on="id")\
    .select("A.*", "B.b1", "B.b2")

如果您的数据帧具有长而复杂的名称,您还可以使用<code>alias()

A_B = long_data_frame_name1.alias("A").withColumn("id", col("a_id"))\
    .join(long_data_frame_name2.alias("B").withColumn("id", col("b_id")), on="id")\
    .select("A.*", "B.b1", "B.b2")
 类似资料:
  • 问题内容: 我有2个数据框: restaurant_ids_dataframe 和 restaurant_review_frame 我想使用熊猫中的DataFrame.join()命令将这两个DataFrame加入一个单一的数据框中。 我尝试了以下代码行: 但是,当我尝试这样做时,出现以下错误: 我对熊猫很陌生,不知道就执行join语句而言我在做什么错。 任何帮助将非常感激。 问题答案: 您可以使

  • 假设我有一个spark数据帧,有几列(其中列)和数据帧,有两列:和。 是否有复制以下命令的方法

  • 问题内容: 该表包含一个ID列,valueHeading列和一个value列。我想将value列分为两个新列,分别称为valueHeading1和valueHeading2,具体取决于值具有哪种valueHeading类型。 所以我想加入这个选择: 编辑:完全加入 使用此选择: 在各自的ID上。我该怎么做呢? 编辑 以说明我要执行的操作: 原始表格: 新表: 问题答案: 在SQLServer200

  • 问题内容: 我找不到关于交叉联接的任何信息,包括合并/联接或其他一些东西。我需要使用{my function}作为myfunc处理两个数据帧。相当于: 相当于: 但我需要更有效的解决方案:如果使用了应用,我将如何实现它们; ^^ 问题答案: 对于叉积,请参阅此问题。 本质上,您必须进行常规合并,但为每一行赋予相同的键以进行连接,以使每一行在框架之间相互连接。 然后可以通过应用函数将列添加到新框架:

  • 我试图连接两个表,但似乎有一个问题,我寻找的输出是有主题的行量。

  • 本文向大家介绍ZendFramework框架实现连接两个或多个数据库的方法,包括了ZendFramework框架实现连接两个或多个数据库的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ZendFramework框架实现连接两个或多个数据库的方法。分享给大家供大家参考,具体如下: 配置文件: 入口文件 这里是默认的数据库 dao.php调用默认数据库 dao2.php连接其他数据库 调