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
相关产品推荐
相关产品推荐

