使用 monotonically_increasing_id() 将行号分配给 pyspark 数据帧

2023-11-22

我使用 monotonically_increasing_id() 使用以下语法将行号分配给 pyspark 数据帧:

df1 = df1.withColumn("idx", monotonically_increasing_id())

现在 df1 有 26,572,528 条记录。所以我期望 idx 值在 0-26,572,527 之间。

但当我选择 max(idx) 时,它的值却大得出奇:335,008,054,165。

这个函数是怎么回事? 使用此函数与具有相似记录数的另一个数据集合并是否可靠?

我有大约 300 个数据帧,我想将它们组合成一个数据帧。因此,一个数据帧包含 ID,其他数据帧包含与它们按行对应的不同记录


Edit:可以找到执行此操作的方法和风险的完整示例here

来自文档

生成单调递增 64 位整数的列。

生成的ID保证单调递增且唯一,但不连续。当前的实现将分区 ID 放在高 31 位中,将每个分区内的记录号放在低 33 位中。假设数据框的分区数少于10亿个,每个分区的记录数少于80亿条。

因此,它不像 RDB 中的自增 id,而是not合并可靠。

如果您需要像 RDB 中那样的自动增量行为并且您的数据是可排序的,那么您可以使用row_number

df.createOrReplaceTempView('df')
spark.sql('select row_number() over (order by "some_column") as num, * from df')
+---+-----------+
|num|some_column|
+---+-----------+
|  1|   ....... |
|  2|   ....... |
|  3| ..........|
+---+-----------+

如果您的数据不可排序并且您不介意使用 rdds 创建索引然后回退到数据帧,您可以使用rdd.zipWithIndex()

可以找到一个例子here

简而言之:

# since you have a dataframe, use the rdd interface to create indexes with zipWithIndex()
df = df.rdd.zipWithIndex()
# return back to dataframe
df = df.toDF()

df.show()

# your data           | indexes
+---------------------+---+
|         _1          | _2| 
+-----------=---------+---+
|[data col1,data col2]|  0|
|[data col1,data col2]|  1|
|[data col1,data col2]|  2|
+---------------------+---+

之后您可能需要更多的转换才能使您的数据框达到您需要的效果。注意:这不是一个非常高性能的解决方案。

希望这可以帮助。祝你好运!

Edit:想一想,你可以结合monotonically_increasing_id使用row_number:

# create a monotonically increasing id 
df = df.withColumn("idx", monotonically_increasing_id())

# then since the id is increasing but not consecutive, it means you can sort by it, so you can use the `row_number`
df.createOrReplaceTempView('df')
new_df = spark.sql('select row_number() over (order by "idx") as num, * from df')

但不确定性能。

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

使用 monotonically_increasing_id() 将行号分配给 pyspark 数据帧 的相关文章

  • 将字符串转换为带有毫秒和时区的日期时间 - Python

    我有以下 python 片段 from datetime import datetime timestamp 05 Jan 2015 17 47 59 000 0800 datetime object datetime strptime t
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像

随机推荐

  • 使用 StructureMap 进行单元测试

    我在 DI IOC 的 Web 项目中使用 StructureMap 它工作完美 但我不知道如何使用 StructureMap 编写单元测试 我应该像在 global asax 中那样在 AssemblyInitialize start S
  • UICollectionView 将手指拖动到单元格上以选择它们

    Using UICollectionView 是否可以通过将手指拖动到其中几个单元格上来选择多个单元格 例如 如果您将手指拖动到一行 6 上 然后向下拖动到下一行 它将选择所有这些 尝试了一些简单的事情 UISwipeGestureReco
  • Java VisualVM 在 OOME 上启用堆转储

    根据文档当应用程序遇到 OutOfMemoryException 时 可以自动进行堆转储 OutOfMemoryException 进程之后就从左侧菜单中消失 此功能在 VisualVM 中如何工作 Thanks C work temp g
  • DbSet.Cast() 错误:无法从非通用 DbSet 为“Entity”类型的对象创建 DbSet

    版本信息 我正在使用 C 4 5 Entity Framework 6 0 和 MEF 代码和单元测试 我创建了一个测试项目来解释这个问题 https skydrive live com redir resid E3C97EC293A340
  • 如何通过 HTTP 向受众发送 Firebase 通知

    在 Firebase 控制台中 我根据各种用户属性设置受众群体 现在可以通过控制台向不同的用户群体发送通知 有没有办法通过向 fcm 服务器发出 http 请求来执行相同的操作 to 字段应该有一个技巧 但我无法弄清楚 火力战士在这里 目前
  • AngularJS 中“getElementById”的替代方案

    检查这个PLNKR 我有一个带有 id 的列表myMenuList 这是一个加入script js显示Numer of li and UL width by scope mml angular element document getEle
  • JPA/hibernate 时间戳未保存在数据库/对象实体中

    我使用 javax persistence 作为我的实体对象 Mysql 作为数据库 我的实体对象有一个字段entryDate Column name ENTRYDATE private Date entryDate new Date 当我
  • 如何在Android Studio中将库导出到Jar?

    我已经下载了一些库源并想使用以下命令将其导出为 Jar 文件 安卓工作室 有没有办法使用 Android studio 导出到 jar 文件 edit 我想要导出为 jar 的库是一个 Android 库 它被称为 StandOut 可以从
  • UILabel 未更新

    抱歉这个基本问题 但这让我困扰了一段时间 我从 UITable 创建一个详细信息视图并尝试动态设置其标签 但它们没有更新 void tableView UITableView tableView didSelectRowAtIndexPat
  • 我应该将哪个数据库与 Node.js 一起使用? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我应该将哪个数据库与 No
  • 如何使用Python/PyQT/Win32获取Windows任务栏的高度

    我试图让我的 GUI 程序与 Windows 屏幕的右下角对齐 当任务栏没有隐藏时 我的程序就会站在任务栏的顶部 使用Python PyQT Win32时 我该如何 检查任务栏的自动隐藏功能是否开启 获取任务栏的高度 As 大卫 赫弗南提到
  • 当出现错误时,将用户重定向回表单后,如何重新填写用户填写的表单字段?

    简洁版本 我有一个包含 100 多个字段的表单 每个字段都有服务器端验证 我已成功提交表格并提交数据 当验证出现错误时 我什至将它们重定向回表单 并显示具体发生的错误 当他们重定向回 大型 表单时 所有数据都消失了 他们需要重新输入 我已经
  • 如何访问整个 AutoFac 容器以在 Orchard 中注册依赖项?

    这个问题非常简单 我想访问整体AutoFac容器 以便我可以在其中注册我的依赖项 remark 我不同意继承自IDependency因为在我的项目中 它会导致 两个程序集 的循环引用 我想要做的是使用密钥注册一个组件 并在其他程序集中使用相
  • 如何将 CMSampleBufferRef 转换为 NSData

    如何将 CMSampleBufferRef 转换为 NSData 我已经设法获取数据MPMediaItem通过遵循 Erik Aigner 的回答这个线程 但是数据的类型CMSampleBufferRef 我知道 CMSampleBuffe
  • Swift:无法在 if let 语句条件中使用数组过滤器

    假设我有一个用户名数组 let users Hello 1212 12 Bob Rob 我想得到第一个名字长度为2的用户 所以我过滤了数组并得到了第一个用户 if let selected users filter 0 characters
  • 使用 Chokidar 监视特定文件扩展名

    我正在寻找使用 nodejs Chokidar 观看文件夹 我只想监视 xml 文件的添加 删除 我是 Chokidar 的新手 无法弄清楚 我尝试设置 Chokidar 忽略以匹配以 xml 结尾的所有字符串 但看起来 Chokidar
  • C# = 为什么 Excel 进程没有结束?

    我有以下代码 private bool IsMousetrapFile string path logger Log validateFileMessage path Excel Application xlApp new Microsof
  • Objective C 中的模运算符

    来自 Objective C 编程 Kochan 程序5 8提示用户输入数字 然后显示数字 从该数字从最右边到最左边的数字 Program to reverse the digits of a number import
  • Java中如何快速判断一个方法是否被重写

    如果我可以确定同一类中的另一个方法没有被覆盖 那么我可以对我的其中一个方法应用可能的优化 这只是一个轻微的优化 所以反射是不可能的 我是否应该创建一个受保护的方法来返回该方法是否被重写 以便子类可以使其返回 true 我不会这样做 它违反了
  • 使用 monotonically_increasing_id() 将行号分配给 pyspark 数据帧

    我使用 monotonically increasing id 使用以下语法将行号分配给 pyspark 数据帧 df1 df1 withColumn idx monotonically increasing id 现在 df1 有 26