Python 在pyspark中将数据帧分组之前进行排序是否安全?

Python 在pyspark中将数据帧分组之前进行排序是否安全?,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,给定一个pyspark数据帧df,其列为“ProductId”、“Date”和“Price”,按“Date”排序并假定func.first“Price”将始终检索与最小日期对应的价格,安全性如何 我的意思是:威尔 df.orderBy'ProductId',Date'.groupBy'ProductId'.aggfunc.first'Price' 在分组时,在不影响订购人的情况下,为每种产品返回及时支付的第一个价格?我不确定是否保证为订购人保留订单。然而,这里有另一种方法来做你想做的事情 用于根

给定一个pyspark数据帧df,其列为“ProductId”、“Date”和“Price”,按“Date”排序并假定func.first“Price”将始终检索与最小日期对应的价格,安全性如何

我的意思是:威尔 df.orderBy'ProductId',Date'.groupBy'ProductId'.aggfunc.first'Price'
在分组时,在不影响订购人的情况下,为每种产品返回及时支付的第一个价格?

我不确定是否保证为订购人保留订单。然而,这里有另一种方法来做你想做的事情

用于根据需要对数据帧进行分区和排序。然后使用删除重复条目

例如:

创建虚拟数据

数据=[ 123, '2017-07-01', 50, 123, '2017-01-01', 100, 345, '2018-01-01', 20, 123, '2017-03-01', 25, 345, '2018-02-01', 33 ] df=sqlCtx.createDataFramedata,['ProductId','Date','Price'] df.show +-----+-----+---+ |ProductId |日期|价格| +-----+-----+---+ | 123|2017-07-01| 50| | 123|2017-01-01| 100| | 345|2018-01-01| 20| | 123|2017-03-01| 25| | 345|2018-02-01| 33| +-----+-----+---+ 使用窗口

使用Window.partitionBy'ProductId'。orderBy'Date':

导入pyspark.sql.f函数 从pyspark.sql导入窗口 选择 “ProductId”, f、 第一个'Price'。overWindow.partitionBy'ProductId'。orderBy'Date'。别名'Price' .独特的 +-----+---+ |ProductId |价格| +-----+---+ | 123| 100| | 345| 20| +-----+---+ 编辑


我发现其中接受的答案是保留顺序,尽管评论中有一个与此相矛盾的讨论。

好吧,我需要分组,因为我需要在其他列上进行聚合。我的真实案例有点复杂。你可以将其扩展到多个聚合。只需在select语句中添加更多项。您还可以在外部定义窗口以保存键入:w=window.partitionBy'ProductId'。orderBy'Date',然后简化为f.first'Price'。overw.alias…是否可以在groupby的聚合器内部使用窗口函数?像df.groupBy'Product.aggf.first'Price.overv.alias'first Price',其中w=Window.partitionBy'Product.orderby'Date'。我无法使用该语法并不意味着它不可能。我还发现,在接受的答案中,顺序是保留的,但评论和其他答案中的讨论表明相反。