首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在pyspark数据帧中用数字替换字符串

在pyspark数据帧中用数字替换字符串
EN

Stack Overflow用户
提问于 2019-07-25 14:20:10
回答 1查看 171关注 0票数 0

我刚接触pyspark,我想在pyspark dataframe列中动态地用数字替换名称,因为我的dataframe中有超过500,000个名称。如何继续?

代码语言:javascript
复制
----------
| Name   |
----------
| nameone|
----------
| nametwo|
----------

应该变成

代码语言:javascript
复制
--------
| Name |
--------
|   1  |
--------
|   2  |
--------
EN

回答 1

Stack Overflow用户

发布于 2019-07-25 21:33:04

你有两个我能想到的选择。如果您只有唯一的名称,您可以简单地应用monotonically_increasing_id函数。这将为每一行创建唯一但不连续的id。

代码语言:javascript
复制
import pyspark.sql.functions as F
from pyspark.ml.feature import StringIndexer

l = [
('nameone', ),
('nametwo', ),
('nameone', )
]

columns = ['Name']

df=spark.createDataFrame(l, columns)
#use Name instead of uniqueId to overwrite the column
df = df.withColumn('uniqueId', F.monotonically_increasing_id())
df.show()

输出:

代码语言:javascript
复制
+-------+----------+ 
|   Name|  uniqueId| 
+-------+----------+ 
|nameone|         0| 
|nametwo|8589934592| 
|nameone|8589934593| 
+-------+----------+

如果要将相同的id分配给具有相同Name值的行,则必须使用StringIndexer

代码语言:javascript
复制
indexer = StringIndexer(inputCol="Name", outputCol="StringINdex")
df = indexer.fit(df).transform(df)
df.show()

输出:

代码语言:javascript
复制
+-------+----------+-----------+ 
|   Name|  uniqueId|StringINdex| 
+-------+----------+-----------+ 
|nameone|         0|        0.0| 
|nametwo|8589934592|        1.0| 
|nameone|8589934593|        0.0| 
+-------+----------+-----------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57195497

复制
相关文章

相似问题

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