Динамический поиск значений Null в кадре данных и замена его средним значением следующего и предыдущего значения - PullRequest
0 голосов
/ 13 мая 2019

У меня есть dataframe с 5 столбцами. Мне нужно динамически проверять столбцы на наличие нулевых значений и заменять их средним значением предыдущего и следующего значения, ожидая код scala

Мне удалось динамически проверить нулевые значения и отфильтровать его. Но я не понимаю, как обновить его с помощью среднего значения вместо нулевого

 val df = spark.createDataFrame(Seq(
     |   (1, Some(5), 2, "F"),
     |   (2, Some(2), 4, "F"),
     |   (3, None, 6, "N"),
     |   (4, Some(3),    8, "F")
     | )).toDF("ACCT_ID", "M_CD", "C_CD","IND")
df: org.apache.spark.sql.DataFrame = [ACCT_ID: int, M_CD: int ... 2 more fields]

создано условие фильтра для динамической проверки

val filterCond = df.columns.map(x=>col(x).isNotNull).reduce(_ && _)
filterCond: org.apache.spark.sql.Column = ((((ACCT_ID IS NOT NULL) AND (M_CD IS NOT NULL)) AND (C_CD IS NOT NULL)) AND (IND IS NOT NULL))

применил его к фрейму данных: s

cala> val df1 = df.filter(filterCond)
df1: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = [ACCT_ID: int, M_CD: int ... 2 more fields]

scala> df1.show
+-------+----+----+---+
|ACCT_ID|M_CD|C_CD|IND|
+-------+----+----+---+
|      1|   5|   2|  F
       2|   2|   4|  F|
|      4|   3|   8|  F|
+-------+----+----+---+

Я могу получить ненулевые строки. Не могу сделать логику для замены нулевых значений

Я уже обновился выше

я / р:

a1  a2  a3  a4  a5
1   5   8   9   10
?   6   8   2   3
5   4   6   ?   1
?   5   ?   6   4
4   2   3   4   4

выход:

a1  a2  a3  a4  a5
1   5   8   9   10
3   6   8   2   3
5   4   6   4   1
4   5   4   6   4
4   2   3   4   4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...