Работает ли сейчас использование set.seed с Sparklyr?
В последний раз, когда я играл со Sparklyr (октябрь 17 года), была проблема с использованием set.seed при работе со Sparklyr. Я не уверен, в чем именно заключалась проблема, и я не могу ничего найти об этом где-либо. Правильно ли работает set.seed со Sparklyr или это все еще не решенная проблема?
1 ответ
В общем
set.seed
работает просто отлично, где и положено - в локальном сеансе R aka driver (место, где вы звоните spark_connect
).
Он не работает и не может работать между исполнителями по ряду причин, включая разные контексты выполнения (R, JVM) и / или разные среды (с такими методами, как spark_apply
).
С обертками Spark:
С такими методами, как ml_*
или же ft_
и т.д. семена устанавливаются искрой и обычно подвергаются воздействию seed
аргумент. Например ml_kmeans
:
> ml_kmeans
function (x, formula = NULL, k = 2L, max_iter = 20L, tol = 1e-04,
init_steps = 2L, init_mode = "k-means||", seed = NULL, features_col = "features",
prediction_col = "prediction", uid = random_string("kmeans_"),
...)
{
UseMethod("ml_kmeans")
}
<environment: namespace:sparklyr>
Seed также может быть установлен для функций RNG SQL:
> df %>% mutate(rand = rand(42L), randn = randn(42L)) %>% head(3)
# Source: lazy query [?? x 3]
# Database: spark_connection
id rand randn
<int> <dbl> <dbl>
1 1 0.666 0.409
2 2 0.858 0.881
3 3 0.914 -2.01
> df %>% mutate(rand = rand(42L), randn = randn(42L)) %>% head(3)
# Source: lazy query [?? x 3]
# Database: spark_connection
id rand randn
<int> <dbl> <dbl>
1 1 0.666 0.409
2 2 0.858 0.881
3 3 0.914 -2.01
С кодом R на стороне исполнителя
Насколько я знаю, сегодня нет доступных опций. Для правильной настройки начального числа ГСЧ на нескольких машинах потребуется API для доступа к информации о задачах низкого уровня, и даже если предположить, что никакие другие источники недетерминизма не могут быть хрупкими в гетерогенных средах.
тем не мение
Состояние ГСЧ не является единственным источником недетерминированного поведения в распределенных системах. Поскольку в Spark в целом не гарантируется какой-либо конкретный порядок выполнения, результаты могут отличаться для разных прогонов, даже если состояние RNG установлено правильно.
В целом:
Если ваша цель - воспроизводимые исследования, вы все равно сможете использовать Spark, но для этого потребуется защитное программирование, сознательная настройка кластера, и это не то, что вы можете делать со встроенными инструментами, не говоря уже об ограниченных высокоуровневых оболочках. лайк sparklyr
,