Spark DataFrame(Scala):拆分合并列并保留其余数据求助
解决Spark DataFrame拆分"age;job"列的方案
操作步骤(Spark Shell Scala环境)
- 导入Spark SQL所需函数
- 拆分目标合并列并提取独立字段
- 删除原合并列,保留其余所有数据
代码实现
方法一:直接拆分提取(简洁版)
import org.apache.spark.sql.functions.{split, col} // 假设你的原始DataFrame名为df val processedDF = df // 拆分"age;job"列,提取第一个元素作为age列并转为整数(按需调整类型) .withColumn("age", split(col("age;job"), ";").getItem(0).cast("int")) // 提取第二个元素作为job列 .withColumn("job", split(col("age;job"), ";").getItem(1)) // 删除原合并列 .drop("age;job") // 验证处理结果 processedDF.show() processedDF.printSchema()
方法二:先存拆分结果再提取(性能优化版)
如果数据量较大,为避免重复调用split函数消耗资源,可先将拆分后的数组暂存为临时列:
import org.apache.spark.sql.functions.{split, col} val processedDF = df .withColumn("temp_split", split(col("age;job"), ";")) .withColumn("age", col("temp_split").getItem(0).cast("int")) .withColumn("job", col("temp_split").getItem(1)) // 同时删除原合并列和临时列 .drop("age;job", "temp_split") processedDF.show()
注意事项
- 如果age列不需要整数类型,直接去掉
.cast("int")即可 - 若实际分隔符不是分号,替换
split函数中的";"为对应分隔符 - 该操作会自动保留原始DataFrame中的所有其他列,无需额外指定
内容的提问来源于stack exchange,提问作者Rashad Nelson
相关产品推荐
相关产品推荐

