gpt4 book ai didi

scala - Spark SQL 仅映射一列 DataFrame

转载 作者:行者123 更新时间:2023-12-01 23:37:52 26 4
gpt4 key购买 nike

对于菜鸟问题​​很抱歉,我在 SparkSQL 中有一个像这样的数据框:

id | name | data
----------------
1 | Mary | ABCD
2 | Joey | DOGE
3 | Lane | POOP
4 | Jack | MEGA
5 | Lynn | ARGH

我想知道如何做两件事:

1) 在一个或多个列上使用 scala 函数来生成另一列
2) 在一列或多列上使用 scala 函数来替换一列

例子:

1) 创建一个新的 bool 列,告诉数据是否以 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 |
+---+----+----+-----------+

关于scala - Spark SQL 仅映射一列 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50238334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com