Как заполнить последние ненулевые данные в столбце? - PullRequest
0 голосов
/ 10 октября 2019

Мой входной DataFrame выглядит следующим образом:

+-------+
|Column1|
+-------+
|FILE_1 |
|11     |
|12     |
|212    |
|FILE_2 |
|1213   |
|13312  |
|4124   |
+-------+

На входе DataFrame FILE_ * - имя файла, а данные ниже FILE_ - его содержимое.

Например, FILE_1 имеет 11, 12,212 содержимого.

Я хочу добавить новый столбец в существующий входной DataFrame, который дает мне это отношение имени файла и его содержимого, как показано ниже:

+-------+-------+
|Column1|Column2|
+-------+-------+
|FILE_1 |FILE_1 |
|11     |FILE_1 |
|12     |FILE_1 |
|212    |FILE_1 |
|FILE_2 |FILE_2 |
|1213   |FILE_2 |
|13312  |FILE_2 |
|4124   |FILE_2 |
+-------+-------+

1 Ответ

1 голос
/ 10 октября 2019

Это один из подходов:

import org.apache.spark.sql.functions.{last, when}
import org.apache.spark.sql.expressions.Window

    val df = Seq("FILE_1","11","12","212","FILE_2","1213","3312","4124").toDF("column1")
    val w = Window.rowsBetween(Window.unboundedPreceding, 0)
    val df2 = df.withColumn("tmp", when($"column1".startsWith("FILE_"), $"column1").otherwise(null))
      .withColumn("column2", last($"tmp", true).over(w)).drop("tmp")

Результат выглядит примерно так

Получите больше информации о Spark Window через это здоровоПост базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...