Spark DataFrame如何通用拼接多列名与对应值生成新列
解决方案
直接通过DataFrame的columns属性获取全部列名,批量生成每列的「列名=值」拼接表达式,再用concat_ws统一拼接所有键值对即可,不需要手动枚举a到x的列,完全适配动态列数场景。
完整实现代码如下:
import org.apache.spark.sql.functions.{col, lit, concat, concat_ws} // 1. 获取当前DataFrame所有列名 val allColumns = sample.columns // 2. 为每一列生成拼接表达式:格式为 列名=值 val kvExprList = allColumns.map(colName => concat(lit(s"$colName="), col(colName))) // 3. 用逗号+空格分隔所有键值对,外层包裹双引号,命名为concate-fields val resultDf = sample.select( concat( lit("\""), concat_ws(", ", kvExprList: _*), lit("\"") ).alias("concate-fields") ) // 输出结果 display(resultDf)
如果需要排除部分列不参与拼接,只需要在获取列名的步骤加过滤逻辑即可,比如要跳过id列:
val allColumns = sample.columns.filter(_ != "id")
内容的提问来源于stack exchange,提问作者reachify
相关产品推荐
相关产品推荐

