ошибка преобразования кадра данных pyspark в массив numpy для запуска lightgbm - PullRequest
0 голосов
/ 17 января 2020

Я бы хотел запустить lighGBM.LGBMRegressor на кластере блоков данных с помощью pyspark.

Мой код был разработан на основе:

https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.LGBMRegressor.html#lightgbm .LGBMRegressor.fit

 import lightgbm as lgb

 gbm_regressor = lgb.LGBMRegressor(...)

 gbm_regressor.fit(x_train, y_train)

Здесь x_train и y_train - это фрейм данных и список pyspark. Исходя из приведенной выше ссылки, API-интерфейс fit () должен иметь следующий вид:

  X (array-like or sparse matrix of shape = [n_samples, n_features]) – Input feature matrix.
  y (array-like of shape = [n_samples]) – The target values (class labels in classification, real numbers in regression).

Мне нужно преобразовать X и y в массив на numpy.

  new_x_train = np.array(x_train.select(x_train.columns).collect())

, но это заняло долгое время, чтобы сделать коллекцию, хотя я выделил достаточно памяти для этого. Наконец, я получил ошибку:

 Error while obtaining a new communication channel
 ConnectException error: This is often caused by an OOM error that causes the connection to the Python REPL to be closed. Check your query's memory usage.

Мои данные для x_train могут быть 40 ГБ (с 30 миллионами строк), а узел драйвера имеет 128 ГБ памяти.

Может кто-нибудь помочь мне выяснить, почему я получил эту ошибку?

спасибо

1 Ответ

0 голосов
/ 17 января 2020

Похоже, , как будто сбой драйвера из-за исключения "Недостаточно памяти", и после этого он не может установить sh новое соединение с драйвером. Пожалуйста, попробуйте следующие варианты

  • Увеличьте объем памяти на стороне водителя, а затем повторите попытку.
  • Вы можете посмотреть на задание spark, которое даст вам больше информации о потоке данных.

Операции Spark выполняются лениво, и, следовательно, вся обработка будет выполняться только после вызова действия. Если вы иногда видите ошибку OOM, я рекомендую проверить утилиту кучи и шаблоны G C на драйвере.

Дополнительно проверьте конфигурацию для **spark.driver.maxResultSize**

Дополнительная справка:

https://forums.databricks.com/topics/spark+out+of+memory.html

Надеюсь, это поможет.

...