scala - Spark SQL仅映射一列DataFrame
问题描述
抱歉这个菜鸟问题,我在 SparkSQL 中有一个这样的数据框:
id | name | data
----------------
1 | Mary | ABCD
2 | Joey | DOGE
3 | Lane | POOP
4 | Jack | MEGA
5 | Lynn | ARGH
我想知道如何做两件事:
1) 在一个或多个列上使用 scala 函数来生成另一列 2) 在一个或多个列上使用 scala 函数来替换一列
例子:
1) 创建一个新的布尔列,告诉数据是否以 A 开头:
id | name | data | startsWithA
------------------------------
1 | Mary | ABCD | true
2 | Joey | DOGE | false
3 | Lane | POOP | false
4 | Jack | MEGA | false
5 | Lynn | ARGH | true
2)用小写对应替换数据列:
id | name | data
----------------
1 | Mary | abcd
2 | Joey | doge
3 | Lane | poop
4 | Jack | mega
5 | Lynn | argh
在 SparkSQL 中执行此操作的最佳方法是什么?我已经看到了很多关于如何返回单个转换列的示例,但我不知道如何返回包含所有原始列的新 DataFrame。
解决方案
您可以使用withColumn
添加新column
列或将现有列替换为
val df = Seq(
(1, "Mary", "ABCD"),
(2, "Joey", "DOGE"),
(3, "Lane", "POOP"),
(4, "Jack", "MEGA"),
(5, "Lynn", "ARGH")
).toDF("id", "name", "data")
val resultDF = df.withColumn("startsWithA", $"data".startsWith("A"))
.withColumn("data", lower($"data"))
如果你想要单独的数据框,那么
val resultDF1 = df.withColumn("startsWithA", $"data".startsWith("A"))
val resultDF2 = df.withColumn("data", lower($"data"))
withColumn
column
如果提供了相同的名称,则替换旧名称,如果提供新名称column
,则创建一个新名称。输出:column
column
+---+----+----+-----------+
|id |name|data|startsWithA|
+---+----+----+-----------+
|1 |Mary|abcd|true |
|2 |Joey|doge|false |
|3 |Lane|poop|false |
|4 |Jack|mega|false |
|5 |Lynn|argh|true |
+---+----+----+-----------+
推荐阅读
- java - Dao 为空,但仅在一种情况下
- python - tf.nn.softmax_cross_entropy_with_logits_v2 的概率分布
- php - PHP按两个属性对对象数组进行排序
- windows - 在 for 循环中编辑/替换变量子字符串
- vuejs2 - vue-cli 3.0 devserver代理使用axios不生效
- regex - 没有斜杠就无法重定向到 url
- c# - C# UserControl按钮单击将项目从form1添加到列表框
- java - Dropwizard - 可恢复的文件上传
- c# - BulletPhysics - 明确设置铰链角度?
- go - 在双核 cpu 上运行 GO runtime.GOMAXPROCS(4)