抱歉,菜鸟问题,我在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 |
+---+----+----+-----------+
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句