Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 需要在pyspark中连接多个表:_Python 3.x_Pyspark_Pyspark Sql - Fatal编程技术网

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表达式访问它,因为返回的对象尚未绑定到任何名称。