我们有一个具有2048个功能(Resnet50嵌入)的大型数据集,可用于Spark上的线性回归,并且不断获取StackOverflowError。我在Zeppelin上玩过各种-Xss设置,发现它只能工作几次,并且在大多数情况下会因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错误。
在this question中,我尝试将齐柏林飞艇设置更改为其他设置,它一次成功地在“ 16g”处成功,一次成功地在“ 16m”处成功,但是由于Stackoverflow错误而再次失败。
spark.executor.extraJavaOptions=-Xss16m
spark.driver.extraJavaOptions=-Xss16m
我不确定是否有更好的方法来调试stackoverflow错误并找到最佳配置/代码更改。相同的代码适用于100-200列。