首页 > 解决方案 > 在一个语句中连接多个数据框并仅选择所需的列

问题描述

我有以下 Spark DataFrame:

我想使用 Python 加入所有这些 Spark 数据帧。这是我需要复制的 SQL 语句。

SQL:

select df1.*,df2.salary,df3.dob
from df1    
left join df2 on df1.id=df2.id    
left join df3 on df1.name=df3.name

我使用 python 在 Pyspark 中尝试了如下所示的内容,但收到错误消息。

joined_df = df1.join(df2,df1.id=df2.id,'left')\
               .join(df3,df1.name=df3.name)\
               .select(df1.(*),df2(name),df3(dob)

我的问题:我们可以一次性加入所有三个 DataFrame 并选择所需的列吗?

标签: pythonpysparkpyspark-sql

解决方案


如果您有一个有效的 SQL 查询,为什么不使用pyspark-sql

首先用于pyspark.sql.DataDrame.createOrReplaceTempView()将您的 DataFrame 注册为临时表:

df1.createOrReplaceTempView('df1')
df2.createOrReplaceTempView('df2')
df3.createOrReplaceTempView('df3')

现在,您可以使用您在参数中提供的名称以表的形式访问这些 DataFrame createOrReplaceTempView()。用于pyspark.sql.SparkSession.sql()执行您的查询:

query = "select df1.*, df2.salary, df3.dob " \
        "from df1 " \
        "left join df2 on df1.id=df2.id "\
        "left join df3 on df1.name=df3.name"

joined_df = spark.sql(query)

推荐阅读