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 函数吗?