Вероятно, 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, возможно, его стоит прочитать для настройки кэша.