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

基于同名同数据类型列连接两表创建新表的技术方案问询

现有伪代码的问题

现有代码只完成了列名相同的筛选,完全没考虑数据类型匹配的要求,会把像示例里col3这种列名相同但类型不同的列错误纳入;而且最终join后的结果会包含原表的所有列,不符合表c只保留目标列的需求。

正确实现方案

要同时满足「列名相同+数据类型匹配」,还要最终只保留这些列,代码如下:

// 1. 找出列名相同且数据类型完全匹配的列
val validCommonCols = df1.schema.fields.filter { field1 =>
  df2.schema.fields.exists { field2 =>
    field1.name == field2.name && field1.dataType == field2.dataType
  }
}.map(_.name).toList

// 2. 基于有效列做inner join,确保行数据匹配
val joinedDf = df1.join(df2, validCommonCols, "inner")

// 3. 只保留目标列,得到最终的表c
val dfC = joinedDf.select(validCommonCols.map(col): _*)
代码说明
  • 第一步遍历df1的schema,同时检查df2中是否存在同名且同类型的字段,精准筛选出符合要求的列
  • 第二步用inner join确保只有两边这些列数据完全匹配的行才会被保留
  • 第三步通过select只保留目标列,完全符合表c的结构要求

用示例数据测试的话,最终dfC的结构就是只包含col1(int)和col2(string),数据也只有5 | ABC这一行,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:20:34