如何在Scala中使用split函数处理列并生成CompanyCode记录
问题需求与实现方案
需求说明
需要处理包含多组分号分隔值的列:
- 每组值格式为
前缀-编码,需提取连字符右侧的编码作为CompanyCode - 每一组值对应生成一条独立记录,其他属性(示例中仅展示目标列)保持复制
原始数据
+-------------------- | unparsed_data| +-------------------- |GT01-5636;GT02-7212 |Gx01-5626;GY01-1112;GL01-4336;GT09-0012
期望输出
+-----------+ |CompanyCode| +-----------+ |5636 | |7212 | |5626 | |1112 | |4336 | |0012 |
Scala实现代码(基于Spark)
import org.apache.spark.sql.functions.{col, explode, split} // 假设已初始化SparkSession,原始数据框为df val resultDF = df // 按分号拆分unparsed_data为字符串数组 .withColumn("code_pairs", split(col("unparsed_data"), ";")) // 将数组拆分为多行,每个编码组单独成一条记录 .withColumn("code_pair", explode(col("code_pairs"))) // 按连字符拆分编码组,提取右侧的CompanyCode .withColumn("CompanyCode", split(col("code_pair"), "-")(1)) // 保留目标列,移除临时中间列 .select("CompanyCode") resultDF.show()
代码逻辑说明
split(col("unparsed_data"), ";"):把每行的字符串按分号分割为数组,每个元素对应一组前缀-编码explode(col("code_pairs")):将数组中的每个元素拆分为独立行,实现一对多的记录展开split(col("code_pair"), "-")(1):对每组前缀-编码按连字符拆分,取索引为1的元素(即连字符右侧的编码内容)
内容的提问来源于stack exchange,提问作者Abhishek Tyagi
相关产品推荐
相关产品推荐

