Spark SQL Map仅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"))

withColumncolumn如果提供了相同的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章