У нас есть большой набор данных с 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 столбцов.