apache-spark - 将函数应用于数据框列 spark scala
问题描述
我有一个包含大量列(150)的大型数据集,我想在除第一列之外的所有列上应用一个函数(UDF),该列具有 id 字段。我能够动态应用该函数,但现在我需要将带有 id 的最终数据集提交回数据帧。火花作业将在集群模式下运行,这是我尝试过的。
val df = sc.parallelize(
Seq(("id1", "B", "c","d"), ("id2", "e", "d","k"),("id3", "e", "m","n"))).toDF("id", "dat1", "dat2","dat3")
df.show
+---+----+----+----+
| id|dat1|dat2|dat3|
+---+----+----+----+
|id1| B| c| d|
|id2| e| d| k|
|id3| e| m| n|
+---+----+----+----+
df.select(df.columns.slice(1,df.columns.size).map(c => upper(col(c)).alias(c)): _*).show
----+----+----+
|dat1|dat2|dat3|
+----+----+----+
| B| C| D|
| E| D| K|
| E| M| N|
+----+----+----+
预期产出
-----+----+----+
id|dat1|dat2|dat3|
-+----+----+----+
|id1| B| C| D|
|id2| E| D| K|
|id3| E| M| N|
-+----+----+----+
解决方案
只需将该id
列添加到其他(转换后的)列:
df.select(
col("id") +: df.columns.tail.map(c => upper(col(c)).alias(c)): _*
).show
+---+----+----+----+
| id|dat1|dat2|dat3|
+---+----+----+----+
|id1| B| C| D|
|id2| E| D| K|
|id3| E| M| N|
+---+----+----+----+
推荐阅读
- asp.net-mvc - 表单中的单选按钮值未传递给操作(mvc)
- azure - 如何使用 ARM 模板创建 MSSQL 数据库用户
- chapel - 如何检查某个字段是否已在 Chapel 中设置?
- javascript - 在另一个组件中访问 Vue 组件数据时遇到问题
- merge - 在 Apache nifi 中将两个模式合并为一个
- coldfusion - CFExchangemail 错误 - 约会不能转换为 EmailMessage
- r - 在热图顶部绘制散点图
- python - 如何识别嵌套字典中的最高值键?
- mysql - Mysql 在没有子查询的情况下比较最大值
- java - 如何设置 Maven 在 Spring Boot 中构建特定文件夹?