首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在DASK_CUDF中创建唯一的ID列

如何在DASK_CUDF中创建唯一的ID列
EN

Stack Overflow用户
提问于 2021-05-19 08:37:15
回答 2查看 203关注 0票数 1

如何在dsak cudf dataframe中创建唯一的id列,到目前为止,我使用的是以下技术,但是如果我将数据增加到超过10 me,则会导致内存错误。

代码语言:javascript
运行
复制
def unique_id(df):
    rag = cupy.arrange(len(df))
    df['unique_id']=rag
    return df
    
part = data.npartitions
data = data.repartitions(npartitions=1)
cols_meta={c:str(data[c].dtype) for c in data.columns}
data = data.map_partitions(lambda df:unique_id(df), meta={**cols_meta,'unique_id'})
data = data.repartitions(npartitions=part)

如果有任何其他方式,或任何修改代码,请建议。谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-19 13:17:36

I之所以这样做是因为希望按顺序创建I,直到长度数据。

其他建议可能会奏效。但是,最简单的方法之一是创建一个值为1的临时列并使用cumsum,如下所示:

代码语言:javascript
运行
复制
import cudf
import dask_cudf
​
df = cudf.DataFrame({
    "a": ["dog"]*10
})
ddf = dask_cudf.from_cudf(df, 3)
​
ddf["temp"] = 1
ddf["monotonic_id"] = ddf["temp"].cumsum()
del ddf["temp"]
​
print(ddf.partitions[2].compute())
     a  monotonic_id
8  dog             9
9  dog            10

正如预期的那样,分区索引2中的两行具有If 9和10。如果需要索引从0开始,可以减去1。

票数 3
EN

Stack Overflow用户

发布于 2021-05-19 08:43:22

您遇到内存错误的原因是以下步骤:

代码语言:javascript
运行
复制
data = data.repartitions(npartitions=1)

通过使用单个分区,您将强制单个工作人员上的所有数据,这将在数据集的大小增加时导致内存问题。您想要做的是在维护每个分区的同时分配一个唯一的标识符,请参阅this answer

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67599701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档