Как сделать условное «withColumn» в кадре данных Spark? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть датафрейм (mydf):

+---+---+---+---+
| F1| F2| F3| F4|
+---+---+---+---+
|  t| y4|  5|1.0|
|  x|  y|  1|0.5|
|  x|  y|  1|0.5|
|  x|  z|  2|1.0|
|  x|  b|  5|1.0|
|  t| y2|  6|1.0|
|  t| y3|  3|1.0|
|  x|  a|  4|1.0|
+---+---+---+---+

Я хочу сделать условное агрегирование внутри "withColumn" следующим образом:

mydf.withColumn("myVar", if($"F3" > 3) sum($"F4") else 0.0)

, то есть для каждой строки, имеющей $F3 <= 0, myVar должно иметь значение 0,0, а остальные суммы $"F4".

Как этого добиться в Spark Scala?

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете использовать функцию when, чтобы использовать условные выражения

import org.apache.spark.sql.functions.when
mydf.withColumn("myVar", when($"F3" > 3, $"F4").otherwise(0.0))

Но я не понимаю, что вы хотите суммировать, поскольку в строке есть одно значение F4

EDIT Если вы хотите объединить сначала, вы можете выполнить groupBy и agg следующим образом:

mydf.groupBy("F1", "F2")
.agg(sum("F3").as("F3"), sum("F4").as("F4"))

А затем добавьте предложение withColumn, как и прежде.

Собираем все вместе :

   mydf.groupBy("F1", "F2")
    .agg(sum("F3").as("F3"), sum("F4").as("F4"))
    .withColumn("myVar", when($"F3" > 3, $"F4").otherwise(0.0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...