首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用Python在PySpark中将列转换为十六进制

使用Python在PySpark中将列转换为十六进制
EN

Stack Overflow用户
提问于 2021-01-21 15:39:32
回答 1查看 2.4K关注 0票数 0

我有一个包含几列数据的DataFrame (使用.toDF从PySpark RDD转换而来)。一列包含十六进制格式的值,例如:

代码语言:javascript
代码运行次数:0
运行
复制
+----------+
|        id|
+----------+
|0x0087AFEE|
|0x00840190|
|0x0082F4D3|
|0x00871A60|
|0x00850A0E|
|0x0084557C|
...

在另一个DataFrame中,我有相同的ID,但以十进制值表示,我想加入这个列。我假设我需要先将这些值转换为10位小数(反之亦然),以便进行比较。我怎样才能做到这一点?

我试过:

代码语言:javascript
代码运行次数:0
运行
复制
    df.withColumn('dec_id', sf.conv(df['id'], 16, 10))

但这回是0。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-21 15:44:25

您需要使用0x删除substring (注意字符串索引从1开始):

代码语言:javascript
代码运行次数:0
运行
复制
import pyspark.sql.functions as F

df.withColumn('dec_id', F.expr("conv(substring(id, 3), 16, 10)")).show()
+----------+-------+
|        id| dec_id|
+----------+-------+
|0x0087AFEE|8892398|
|0x00840190|8651152|
|0x0082F4D3|8582355|
|0x00871A60|8854112|
|0x00850A0E|8718862|
|0x0084557C|8672636|
+----------+-------+

注意,结果是字符串类型。如果您希望具有int/long类型,则可以相应地进行强制转换。

代码语言:javascript
代码运行次数:0
运行
复制
"int(conv(substring(id, 3), 16, 10))"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65830779

复制
相关文章

相似问题

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