Искровой фильтр + карта против flatMap - PullRequest
0 голосов
/ 29 ноября 2018

В искре при вычислении СДР мне было интересно, если, например, у меня есть СДР [Либо [A, B]], и я хочу получить СДР [A] и СДР [B], в основном я нашел 2 подхода:

  1. map + filter

    val rddA = rddEither.filter(_.isLeft).map(case Left(a) => a)
    val rddB = rddEither.filter(_.isRight).map(case Right(b) => b)
    
  2. flatMap

    val rddA = rddEither.flatMap { case Left(a) => Some(a) }
    val rddB = rddEither.flatMap { case Right(b) => Some(b) }
    

Если flatMap более эффективен?поскольку потребуется потенциально меньше вычислений?

И другой вопрос - хорошо ли сохранять RDD для ускорения выполнения, я имею в виду rddEither, потому что я буду вычислять 2 операции, начиная с этого источника, или Spark позаботится об этом.

1 Ответ

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

Вероятно, collect было бы немного яснее. (и, возможно, потребуется меньше вычислений, но я не думаю, что это сильно повлияет на производительность) .

 val rddA = rddEither.collect { case Left(a) => a }
 val rddB = rddEither.collect { case Right(b) => b }

"И другой вопрос: хорошосохраняйте rdd для ускорения выполнения, я имею в виду rddEither, потому что я вычислю 2 операции, начиная с этого источника, или спарк позаботится об этом? "

Spark не позаботится об этом, sparkЛенивый, это означает, что для каждой операции она будет пересчитывать все, что ей нужно, чтобы получить результат - если только где-то нет кеша.
Однако добавление кеша не обязательно повысит производительность, так как если вы хотите, чтобы это было быстровам нужно будет хранить его только в памяти, что может снизить производительность других операций, поскольку у вас будет меньше памяти.А если вы сохраните его на диске, чтобы уменьшить использование памяти, тогда время, затрачиваемое на чтение десериализованных данных с диска, может быть таким же или большим, чем время для перерасчета исходного RDD .Таким образом, вам может потребоваться сравнить несколько опций, чтобы решить, какой из них будет лучше.

Примечание: this - отличный пост об управлении памятью в spark, возможно, его стоит прочитать для настройки кэша.

...