Python 3.x 需要在pyspark中连接多个表:
查询使用:Python 3.x 需要在pyspark中连接多个表:,python-3.x,pyspark,pyspark-sql,Python 3.x,Pyspark,Pyspark Sql,查询使用: df= (df1.alias('a') .join(df2, a.id == df2.id, how='inner') .select('a.*').alias('b') .join(df3, b.id == df3.id, how='inner')) 错误:未定义名称“b”。.alias('b')未创建名为b的Python标识符。它设置返回的数据帧的内部名称。您的a.id可能不是您期望的那样,而是之前定义的那样 我记不起在表达式中按名称访问新创建的D
df= (df1.alias('a')
.join(df2, a.id == df2.id, how='inner')
.select('a.*').alias('b')
.join(df3, b.id == df3.id, how='inner'))
错误:未定义名称“b”。.alias('b')
未创建名为b
的Python标识符。它设置返回的数据帧的内部名称。您的a.id
可能不是您期望的那样,而是之前定义的那样
我记不起在表达式中按名称访问新创建的DF的好方法了。我会选择一个中间标识符:
df_joined = df1.join(df1.id == df2.id, how='inner')
result_df = dj_joined.join(df_joined.id == df3.id, how='inner')
试试:
df=df1.alias('a').join(df2,on=“id”,how='inner')。选择('a.*)。alias('b')。join(df3,on=“id”,how='inner')
谢谢你,保罗!!它起作用了。。你能告诉我我的问题中的错误吗。。这也提前感谢了?正如@9000在下面所说的,这是因为调用alias
不会创建python对象。但是这些别名可以在spark sql表达式中使用。要访问新创建的DF,我相信您可以执行类似于DF=df1.alias('a').join(df2.alias('df2')、on=“a.id=df2.id”、how='inner')。选择('a.*')。别名('b')。join(df3.alias('df3')、on=“b.id=df3.id”、how='inner')的操作。
是的,您可以在字符串表达式中按名称调用它。您无法使用正确的Python表达式访问它,因为返回的对象尚未绑定到任何名称。