在pySpark dateframe中创建CreateOrReplaceTempView的另一种方法

在pySpark dateframe中创建CreateOrReplaceTempView的另一种方法,pyspark,pyspark-dataframes,Pyspark,Pyspark Dataframes,我使用spark.sql创建了一个连接条件,并在创建的特定数据帧上创建了一个tempview。但是,我从架构师那里得到的意见是,不要创建临时视图,而是使用数据帧本身。那么,我如何通过另一种编码方式实现以下目标: df1 = spark.sql(" select a.col1, a.col2, b.col1, b.col2, "rank() over(partition by b.bkeyid order by load_time desc) as rank "

我使用spark.sql创建了一个连接条件,并在创建的特定数据帧上创建了一个tempview。但是,我从架构师那里得到的意见是,不要创建临时视图,而是使用数据帧本身。那么,我如何通过另一种编码方式实现以下目标:

df1 = spark.sql(" select a.col1, a.col2, b.col1, b.col2,
                "rank() over(partition by b.bkeyid order by load_time desc) as rank "
                "from table1 a inner join table2 b "
                "on a.bkeyid = b.bkeyid")

df2 = df1.where(df1.rank == lit(1))   # Using rank to get most current records from the table b
df2.createOrReplaceTempView("new_table")
从新的_表中,我必须将其与另一个表3连接起来,如:

df3 = spark.sql(" select a.col1, a.col2, b.col1, b.col2,
                "rank() over(partition by b.bkeyid order by load_time desc) as rank "
                "from new_table a inner join table3 b "
                "on a.bkeyid = b.bkeyid")

df4 = df3.where(df1.rank == lit(1))
df4.createOrReplaceTempView("new_table2")
我必须使用new_table2使用提供的映射逻辑创建一个目标表。 问题是如何以另一种格式实现上述sql编码。请帮助我更新我的编码部分??
谢谢

我想您应该使用DataFrameAPI来调用相同的查询,而不是SQL查询。 因为不可能为您编写准确的代码,但我将提供有问题的查询的第二部分,或者如果需要,您可以以类似的方式更改第一个查询

from pyspark.sql.window import Window
import pyspark.sql.functions as f
df1 = spark.sql(" select * from (select a.col1, a.col2, b.col1, b.col2,
                rank() over(partition by b.bkeyid order by load_time desc) as rnk 
                from table1 a inner join table2 b 
                on a.bkeyid = b.bkeyid ) c where c.rnk=1")

table3_df =  spark.sql(select * from table3)


new_df2=df1.join(table3_df,df1.bkeyid=table3.bkeyid).select('col1','col2','col3','col4').withColumn("rank", rank().over(Window.partitionBy(df1['bkeyid']).orderBy(df1['load_time'].desc())))
new_df3=filter(new_df2['rank']==1).select('col1','col2','col3','col4').show()

查找DataFrameAPI示例,并在其中查找spark sql函数。嗨,我试过了。但我一直在犯错误:找不到排名<代码>df_new=df1.alias(“a”).join(df2.alias(“b”),a.id=b.id,“inner”).select(a.col1,a.col2,b.col1,b.col2).withColumn(“rank”,rank().over(Window.partitionBy(b.col3,b.col4).orderBy(b.col5.desc(),b.col6.desc()))请让我知道您在查询中发现了什么错误???您以前是如何使用秩函数进行查询的?实际上,我尝试了
spark.sql(“使用sql查询”)
,正如我在问题中提供的那样。它正在工作,但我建议以数据帧的方式使用。。。但是我在按照你的想法执行时出错了。从pyspark.sql.functions import*从pyspark.sql.window import window添加我根据需要导入的所有内容,但再次出现相同的错误。可能是分区中的by或order by我猜有语法错误。