sql使用spark sql dataframe查询分区

问题描述 投票:1回答:1

我这样有一个SQL查询:

WITH cte AS
(
   SELECT *,
         ROW_NUMBER() OVER (PARTITION BY [date] ORDER BY TradedVolumSum DESC) AS rn
   FROM tempTrades
)
SELECT *
FROM cte
WHERE rn = 1

我想在spark sql中使用它来查询我的数据帧。

我的数据框看起来像:enter image description here

我希望每天只使用SecurityDescription获得最多的tradedVolumSum。所以我希望看到类似的东西:

enter image description here

我如何在python中的spark sql中模拟相同的行为?

谢谢!

sql apache-spark-sql bigdata pyspark-sql with-statement
1个回答
1
投票

假设您的数据框名称为tempTrades,以下是您的问题的代码:

import pyspark.sql.functions as F
from pyspark.sql import Window

win_temp = Window.partitionBy(F.col("[date]")).orderBy(F.col("TradedVolumSum").desc())
tempTrades.withColumn(
    "rn",
    F.row_number().over(win_temp)
).filter(
    F.col("rn") == 1
)
© www.soinside.com 2019 - 2024. All rights reserved.