2016-04-22 3 views
1

мне нужно чеком несколько условий, так что я фильтруется мою РДД таким образом:Несколько условий фильтра Apache Спарк

scala> file.filter(r => r(38)=="0").filter(r => r(2)=="0").filter(r => r(3)=="0").count 

Правомерно ли в качестве альтернативы «& &»?

+0

Да, это будет, как и &&, конечно. Не уверен, что будет более эффективным –

+0

Я думаю, что это был вопрос - это вопрос: что более эффективно? –

+0

@ david-griffin Да, это было похоже на двойной вопрос, могу ли я использовать такое выражение, и если он такой же эффективный, как с использованием «&&») –

ответ

3

Да, серия фильтров семантически эквивалентна одному фильтру с && в вашем случае.

file.filter(r => r(38) == "0" && r(2) == "0" && r(3) == "0")

Однако указанный выше вариант гарантированно будет быстрее предыдущей версии. Это может быть установлено с помощью следующего:

  1. && является оператором короткого замыкания, и следующее сравнение происходит только, если первый имеет значение true. Количество сравнений в обоих случаях будет то же (да!).

  2. Версия с несколькими фильтрами включает три прохода над RDD против одного прохода для одного фильтра с &&.

Смежные вопросы