Замените значения NA на «0», используя Scala оптимизированным способом - PullRequest
0 голосов
/ 02 июля 2018

У меня есть ввод spark-dataframe с именем df как,

+---------------+----+----+----+
|Main_CustomerID|  P1|  P2|  P3|
+---------------+----+----+----+
|            101|   1|null|   2|
|            102|null|null|   3|
|            103|   1|   1|null|
+---------------+----+----+----+

Мне нужно заменить null значения df на 0. Я достиг этого,

val columnsListSeq = df.columns.toSeq
var newDF = df
for (index <- columnsListSeq) {
newDF = newDF.na.fill(0, Seq(index))
}

Мой результат dataframe,

+---------------+---+---+---+
|Main_CustomerID| P1| P2| P3|
+---------------+---+---+---+
|            101|  1|  0|  2|
|            102|  0|  0|  3|
|            103|  1|  1|  0|
+---------------+---+---+---+

Но мне нужно использовать оптимизированное решение, чем это for loop. Как я могу это сделать?

1 Ответ

0 голосов
/ 02 июля 2018

DataFrameNaFunctions идут с

def fill(value: T, cols: Array[String]): DataFrame

и

def fill(value: T): DataFrame

, который может заполнять подмножество столбцов (обозначается cols) и все столбцы соответственно.

Однако здесь нет улучшения производительности - только более лаконичный код.

Относительно вашего комментария :

Когда я попробовал это, df.na.fill (0) я не назначил его новому фрейму данных. Таким образом, нет изменений в DF. Присвоив новый фрейм данных, я вижу изменения.

DataFrames являются неизменными. Ваш код не изменяет существующий объект, он просто перезаписывает var. Как указано выше, здесь нет улучшения производительности.

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