Pyspark:使用 DataFrame 的最后一次观察进行前向填充

2023-12-14

使用 Spark 1.5.1,

我一直在尝试转发填充空值与最后已知的观察一栏我的数据框。

可以从空值开始,对于这种情况,我将用第一个已知的观察值向后填充该空值。但是,如果这使代码过于复杂,则可以跳过这一点。

In this post,Scala 中的解决方案针对非常相似的问题提供了zero323.

但是,我不了解 Scala,而且我没有成功地在 Pyspark API 代码中“翻译”它。用 Pyspark 可以做到吗?

感谢您的帮助。

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

| 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

另一种解决方法是尝试这样的方法:

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))
)

因此,它所做的就是根据分区键和顺序列构建窗口。它还告诉窗口回顾窗口内的所有行直到当前行。最后,在每一行,您返回最后一个不为空的值(记住,根据您的窗口,它包括您当前的行)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pyspark:使用 DataFrame 的最后一次观察进行前向填充 的相关文章

随机推荐

  • 使用 PHP 从 pdf 中提取内容

    您能告诉我如何使用 PHP 从 PDF 文档中提取内容吗 格式化是我在这里面临的主要问题 因此 如果有一些方法可以提取相同格式的内容并将其显示在在线文本编辑器上 请告诉我 Thanks 看一下XPDF 我想你可以做 text shell e
  • 防止WebSQL数据库中的SQL注入? (如何处理数据中的引号?)

    我目前正在将 mysql 数据库的 xml 导出导入到 websql 数据库中 以用于在线移动体验 一切工作正常 直到我插入的任何字符串中出现双引号 通常 在 PHP 中我会在插入时使用类似 mysql real escape string
  • 通过网络发送数据并以倍频程绘图

    我正在研究一个机器人 我的目标是绘制机器人的状态 目前 我的工作流程是这样的 启动程序 重定向文件中的输出 robot bash rosrun explo explo node gt states txt 将文件发送到我的本地计算机 rob
  • 在 R 中将大向量分割成区间[重复]

    这个问题在这里已经有答案了 我对 R 不太擅长 我运行了这个循环 得到了一个包含 11 303 044 行的巨大结果向量 我有另一个由维度为 1681 行的循环产生的向量 我希望运行一个chisq test来比较它们的分布 但由于它们的长度
  • jQuery UI 可拖动/可排序/可放置在达到可放置限制时禁用放置

    JS Bin 演示 Task 我正在使用 jQuery UI 创建事件调度程序 事件有一定的长度 以分钟为单位 并且可以将它们拖到不同的日期 每个日期都有自己的最大长度 以分钟为单位 在示例中 每天的最大长度为 480 分钟 并且不应允许插
  • Electron 带有节点通知程序显示 Windows 10 通知

    我正在尝试制作一个简单的应用程序 单击按钮时应显示通知 问题是通知没有显示 但 console logs 正在显示 通知应该在开发模式下工作吗 意思是只是运行electron 而且我不必构建和安装该应用程序 Windows操作系统 版本 W
  • 如何增加 FOR 循环语句中的 FOR 循环值?

    我想知道如何增加 FOR 循环语句中的值 这是我的代码 function Check var MemoryData Array of byte MemorySignature Array of byte Position integer b
  • 拟合多峰分布

    假设我们有两个正态分布的线性组合 我认为人们会将结果称为多模态分布 import numpy as np import matplotlib pyplot as plt from scipy stats import norm ls np
  • 查询中的 Linq Convert.ToInt32

    我有一些代码 from AspNetUsers in db AspNetUsers join UserDetails in db UserDetails on new Id Convert ToInt32 AspNetUsers UserD
  • Python 多处理:进程无法启动

    我是新来的multiprocessing在Python 2 7 中 我尝试运行以下代码 from time import sleep from multiprocessing import Process import multiproce
  • 返回 Haskell 中字符串的第一行

    我有一个相当简单的问题 但我很困惑 基本上 我只需要编写一个函数 它接受一个字符串 将其分成几行 接受第一行并以格式正确的 HTML 标题标记返回第一行 老实说 我只是不知道从哪里开始 任何事情都会有所帮助 我确实有代码 但这只是我用来对输
  • JDK 7的支持终止如何影响Android开发

    Oracle 已宣布他们停止了 JRE 7 的官方更新并且JDK 7 据我所知 Google没有说任何关于JDK 8的信息 我猜Android开发的推荐版本是JDK 7 Android 开发是否正式支持 JDK 8 谷歌Android开发p
  • Visual Studio 2010 中的异步、等待

    我在VS2010和VS2012中运行了下面的代码 但VS2012只返回响应 然后我搜索发现 需要在VS2010中启用async和await 然后通过使用 AsyncCtpLibrary dll 引用 我启用了它 但vs2010仍然没有返回响
  • Python输入错误

    我在 Mac OSX 10 9 5m 上运行 python 2 7 10 但它不起作用 这是代码 YourName py name input What is your name n print Hi name 这是错误 Python 2
  • Uglify 破坏了 npm run build,日志报告没有说明任何特别的内容,npm run dev 可以工作

    这是 npm run build 产生的错误消息 ERROR in build js from UglifyJs Unexpected token punc src App vue 40 0 build js 139 6 npm ERR c
  • 跨线程事件信号(Obj-C)的同步/等待设计?

    在 Cocoa 应用程序中 我有这样的设置 主线程 M 可以向某个后台 生产者 线程 B 提交请求以完成某些工作 例如项目 X 的 计算结果 此后不久 另一个后台线程 C 可能需要计算项 X 的结果 并且需要同步这些结果 线程 C 本身可以
  • Json 无法与 HttpPost 一起使用,可能围绕 setEntity

    我正在使用此代码将其发送到我的 php 文件 该文件看起来像这样 file put contents dump txt POST n print r POST true n n n GET n print r GET true 我像这样发送
  • 当表单有一些数据数组时,JQuery如何仅提交更改的字段

    我有一个具有一对多关系的数据库结构 在html表单中 有类似的输入 名称为 item 或 file 使数据成为数组
  • 如何在 iOS6 上调整 MKAnnotationView 的大小?

    调整 MKAnnotationView 图像大小 地图何时放大和缩小 该方法在iOS5上成功 但在iOS 6上失败 我直接更改 MKAnnotationView 的变换 但没有成功 MKAnnotationView仅在瞬间调整大小 当在MK
  • Pyspark:使用 DataFrame 的最后一次观察进行前向填充

    使用 Spark 1 5 1 我一直在尝试转发填充空值与最后已知的观察一栏我的数据框 可以从空值开始 对于这种情况 我将用第一个已知的观察值向后填充该空值 但是 如果这使代码过于复杂 则可以跳过这一点 In this post Scala