当前位置: 首页 > 知识库问答 >
问题:

Pyspark:用数据frame的最后一次观察向前填充

商天逸
2023-03-14

使用Spark 1.5.1,

下面是一个简单的示例输入:

| cookie_ID     | Time       | User_ID   
| ------------- | --------   |------------- 
| 1             | 2015-12-01 | null 
| 1             | 2015-12-02 | U1
| 1             | 2015-12-03 | U1
| 1             | 2015-12-04 | null   
| 1             | 2015-12-05 | null     
| 1             | 2015-12-06 | U2
| 1             | 2015-12-07 | null
| 1             | 2015-12-08 | U1
| 1             | 2015-12-09 | null      
| 2             | 2015-12-03 | null     
| 2             | 2015-12-04 | U3
| 2             | 2015-12-05 | null   
| 2             | 2015-12-06 | U4

和预期输出:

| cookie_ID     | Time       | User_ID   
| ------------- | --------   |------------- 
| 1             | 2015-12-01 | U1
| 1             | 2015-12-02 | U1
| 1             | 2015-12-03 | U1
| 1             | 2015-12-04 | U1
| 1             | 2015-12-05 | U1
| 1             | 2015-12-06 | U2
| 1             | 2015-12-07 | U2
| 1             | 2015-12-08 | U1
| 1             | 2015-12-09 | U1
| 2             | 2015-12-03 | U3
| 2             | 2015-12-04 | U3
| 2             | 2015-12-05 | U3
| 2             | 2015-12-06 | U4

共有1个答案

徐涵亮
2023-03-14

另一个让它起作用的变通方法是尝试这样的方法:

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

window = (
    Window
    .partitionBy('cookie_id')
    .orderBy('Time')
    .rowsBetween(Window.unboundedPreceding, Window.currentRow)
)

final = (
    joined
    .withColumn('UserIDFilled', F.last('User_ID', ignorenulls=True).over(window))
)

因此,它所做的就是基于分区键和order列构造窗口。它还告诉窗口回看窗口内直到当前行的所有行。最后,在每一行,您返回最后一个非空值(根据您的窗口,记住它包括您的当前行)

 类似资料:
  • 1. 回顾HMM问题一:求观测序列的概率 首先我们回顾下HMM模型的问题一。这个问题是这样的。我们已知HMM模型的参数$$lambda = (A, B, Pi)$$。其中A是隐藏状态转移概率的矩阵,B是观测状态生成概率的矩阵,$$Pi$$是隐藏状态的初始概率分布。同时我们也已经得到了观测序列$$O ={o_1,o_2,...o_T}$$,现在我们要求观测序列O在模型$$lambda$$下出现的条件

  • 如何在收到第一个结果后移除观察者?下面是我尝试过的两种代码方式,但它们都不断接收更新,即使我已经删除了观察者。

  • 我已经将我的应用程序配置为在根级别使用数据服务。我的应用程序中的大多数操作都采用数据模型上的操作形式,组件对此做出响应。我希望组件订阅数据服务并响应它发出的事件,这样它们就可以基于此进行更改(例如,模型中的对象更改,组件更新该对象的表示)。我应该在RXJS中使用可观察的数据模型吗?

  • 我需要将数据框的值添加到我的谷歌电子表格中最后一行记录的末尾,但是我不能。每次我使用下面的代码时,它都会订阅上面的信息。我正在使用一个通用库来更新谷歌工作表电子表格中的数据。

  • 我正在尝试用来自可观察列表的数据填充TableView。我以前做过这个,但由于某种原因我现在无法让它工作。我没有得到任何异常或任何东西,但它根本不会向表添加任何东西。 这个问题很相似,但我发现了JPA引起的另一个问题,这使得提到的的构造函数永远不会执行。相反,JPA会神奇地分配值。 这是我的代码-我剪下了与问题无关的代码: FXML 主要的Java语言 修改Java语言 任何帮助解决这个问题将不胜