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

如何用PySpark拆解含键值与数组的复杂字符串并转换为DataFrame

解决PySpark DataFrame中rms列字符串解析后value1残留[的问题

问题根源

你当前的代码中,从rms字段拆分出的values字符串是带首尾方括号的格式(比如[800,0,100,0,2.168675,...]),直接按逗号分割后,第一个元素会保留开头的[,导致value1列出现残留字符。

解决方案

在对values进行分割前,先通过正则替换去掉首尾的方括号[和],再执行分割操作即可解决该问题。

修改后的完整代码

import pyspark.sql.functions as F
from pyspark.sql.functions import *

data_source = "/curated/SensorMEDCurated"
df = read_delta_from_datalake(global_definitions["curated_dl_zone"], data_source)

print("Original Data:")
df.select("rms").show(1, truncate=False)

# 提取每个键值对的正则表达式
extract_all_pattern = "'(\\d+=\\[[^\\]]+\\])'"
df = df.withColumn("rms", F.expr(f"regexp_extract_all(rms, {extract_all_pattern}, 1)")) \
       .withColumn("rms", F.explode("rms"))

# 拆分键和值部分
df = df.withColumn("outer_value", split(df["rms"], '=').getItem(0))
df = df.withColumn("values", split(df["rms"], '=').getItem(1))

# 移除values字符串首尾的方括号
df = df.withColumn("values", F.regexp_replace("values", "^\\[|\\]$", ""))

# 分割数值数组
df = df.withColumn("values", F.split("values", "[\\s*,\\s*]"))

# 展开为多列
df = df.select(["outer_value"] + [F.element_at("values", i).alias(f"value{i}") for i in range(1,16)])
df.show()

关键修改说明

  • 添加F.regexp_replace("values", "^\\[|\\]$", ""):用正则匹配字符串开头的[和结尾的],并替换为空字符串,清理掉多余的方括号后再进行分割,就能保证value1列的数值正常。

内容的提问来源于stack exchange,提问作者Cengiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:00:57