Работает ли сейчас использование 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,

Другие вопросы по тегам