我有一个包含许多列的数据框,我想对特定列进行一些更改,同时保持所有其他列不变。
更具体地说,我想展开
一列。
目前我正在选择中指定所有列名。
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/