You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark十六进制转十进制:两类格式列数据转换需求

PySpark十六进制转十进制实现方案

处理Value列(分号分隔的十六进制字符串)

针对格式为245FC;324EE;的字符串列,可通过分割字符串→逐个进制转换→重新拼接的步骤实现:

from pyspark.sql import functions as F

# 假设DataFrame名为df
df = df.withColumn(
    "Value_decimal",
    F.concat_ws(";",
        F.transform(
            # 分割字符串并过滤空值(处理末尾分号产生的空元素)
            F.filter(F.split(F.col("Value"), ";"), lambda x: x != ""),
            lambda hex_str: F.conv(hex_str, 16, 10)
        )
    ) + ";"  # 保持原格式末尾的分号
)

关键函数说明:

  • F.split(F.col("Value"), ";"):按分号分割字符串,得到数组["245FC", "324EE", ""]
  • F.filter(..., lambda x: x != ""):过滤掉末尾分号产生的空元素
  • F.transform(..., lambda hex_str: F.conv(hex_str, 16, 10)):对每个十六进制字符串调用conv函数,从16进制转为10进制
  • F.concat_ws(";", ...):将转换后的十进制数组重新用分号拼接,最后添加末尾分号保持格式一致

处理Value_Split列(十六进制数组)

针对格式为[245FC,324EE]的数组列,直接对数组元素批量转换即可:

from pyspark.sql import functions as F

# 假设DataFrame名为df
df = df.withColumn(
    "Value_Split_decimal",
    F.transform(
        F.col("Value_Split"),
        lambda hex_str: F.conv(hex_str, 16, 10)
    )
)

F.transform会遍历数组中的每个十六进制字符串,通过conv(hex_str, 16, 10)将其转为十进制数值,最终返回十进制数组[148988,206062]。

内容的提问来源于stack exchange,提问作者chaitanya kumar Dondapati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:40:44