scala - Spark SQL - 在更新一个列时选择所有列

标签 scala apache-spark-sql

我有一个包含许多列的数据框,我想对特定列进行一些更改,同时保持所有其他列不变。

更具体地说,我想展开一列。

目前我正在选择中指定所有列名。

df.select($"col1", $"col2", ..., $"colN", explode($"colX"))

但我宁愿不必指定所有列名。

我想我可以使用df.columns,过滤掉我想展开的那个,然后在select中使用这个数组。

有没有更简洁的方法来实现这一点?

最佳答案

这是使用 filterNot 的一种方法。 exp_col 是您要与 explode 一起使用的列的名称:

import org.apache.spark.sql.functions.explode

val cols= df.columns.filterNot(_ == "exp_col").map(col(_)) :+ explode($"exp_col")

df.select(cols:_*).show

使用 filterNot,我们创建了一个列表,其中包含我们不想对其应用 explode 的项目。然后我们用 :+ explode($"exp_col") 将它们连接在一起。

关于scala - Spark SQL - 在更新一个列时选择所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58660490/

相关文章:

scala - 如何使用 Map 实例创建 Scala 案例类实例

java - 以编程方式确定 Scalding/Cascading Pipe 的字段名称

scala - 避免在 Spark 中使用 ReduceByKey 进行混洗

scala - 用 Map#getOrElse 输入奇怪的东西

mysql - 用于从列中了解流行主题标签的 SQL 查询,该列具有存储为数组的主题标签列表

scala - 从 spark dataframe 或 RDD 生成键值对,键中存在列名

scala - 发现 : scala. 并发。Future[Option[Int]] 需要 : Option[? ]

java - 无法在scala中使用java代码

scala - 在Apache Spark中读取包含分隔符的CSV文件

sql - Spark sql中使用正则表达式定位函数