sql 在 spark sql 数据帧查询中使用分区

Posted

技术标签:

【中文标题】sql 在 spark sql 数据帧查询中使用分区【英文标题】:sql With partition use in spark sql dataframe query 【发布时间】:2018-09-02 14:46:48 【问题描述】:

我有一个这样的 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 中使用它来查询我的数据框。

我的数据框看起来像:

并且我希望每天使用 SecurityDescription 获得最大的 tradedVolumSum。所以我想看到类似的东西:

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

谢谢!

【问题讨论】:

【参考方案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
)

【讨论】:

其实我可以再问一个问题吗? 谢谢。我的情况是我需要每天比较条目并报告差异。例如第一天有记录 (a,b,c) ,第二天有 (c,d,e) 和第三天有 (f,g)。我应该报告 a、b、c、d、e、f、g 的集合。这意味着例如公司 a、b、c 在第一天有业务,然后在第二天增加业务 d 和 e,第三天 f 和 g。我需要说哪天哪些商家被添加到系统中来做生意 SELECT [Date] ,securityDesc ,TradedVolumSum ,Mnemonic FROM ( SELECT [Date] ,securityDesc ,TradedVolumSum ,Mnemonic ,ROW_NUMBER() OVER (PARTITION BY [date] ORDER BY Mnemonic DESC) AS rn FROM B6Table ) q 按 [日期] 订购 这是我的查询,它可以按所有天分组。我只需要每天查找新添加的条目并报告相同的信息(列) 抱歉,您能否在不同的线程中提出相同的问题并与我分享链接,如果他们面临同样的问题,这将对其他人有所帮助。将在该线程中回答相同的问题。

以上是关于sql 在 spark sql 数据帧查询中使用分区的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在数据帧的每一行上使用 spark sql 函数吗?

使用Spark SQL数据帧写入方法附加MySQL表行

如何在Spark SQL中查询StringType的1个字段具有json值的数据框

我可以使用另一个数据框列来查询 spark sql

控制 spark-sql 和数据帧中的字段可空性

如何在不使用 Spark SQL 的情况下对 Spark 中的数据帧进行排序?