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中将每个组作为新数据帧并在循环中传递另一个函数的最佳方法是啥?

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

在 Spark 中使用 LSH 对数据帧中的每个点运行最近邻查询

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