Линейная регрессия Spark - PullRequest
       13

Линейная регрессия Spark

0 голосов
/ 19 апреля 2019

У нас есть большой набор данных с 2048 функциями (встраивания Resnet50) для использования в линейной регрессии на Spark, и мы постоянно получаем StackOverflowError. Я поиграл с различными настройками -Xss на Zeppelin и обнаружил, что он работает только несколько раз и в большинстве случаев дает сбой StackOverflowError. Вот код scala, который я использую, а "featureColumns" - это массив со всеми именами столбцов 2048.

import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.feature.VectorIndexer
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.ml.regression.LinearRegression

val label="target_column"

val inputData = spark.read.parquet("/path/to/file")
val Array(train, test) = inputData.randomSplit(Array(0.7, 0.3))

val assembler = new VectorAssembler()
                  .setInputCols(featureColumns)
                  .setOutputCol("features")

val featurePanel = assembler.transform(train)

val lr = new LinearRegression()
.setMaxIter(10)
.setRegParam(0.0)
.setElasticNetParam(0.0)
.setLabelCol(label)
.setFeaturesCol("features") 

val featureGroup = featurePanel.select(label, "features")

//featureGroup.count()

val lrModel = lr.fit(featureGroup)

Вышеприведенный код завершается неудачно для шага "lr.fit" (шаг "featureGroup.count ()") с ошибкой stackoverflow.

С на этот вопрос я пытался изменить настройки дирижабля на другие настройки, и он успешно выполнялся при «16g» один раз и при «16m» один раз, но снова не удается с ошибкой Stackoverflow.

spark.executor.extraJavaOptions=-Xss16m
spark.driver.extraJavaOptions=-Xss16m

Я не уверен, есть ли лучший способ отладить ошибку переполнения стека и найти оптимальные конфигурации / изменения кода. Тот же код работает для 100-200 столбцов.

...