PySpark PCA:避免不收敛异常

PySpark PCA:避免不收敛异常,pyspark,pca,decomposition,Pyspark,Pca,Decomposition,我正试图通过ml.linalg方法使用PCA减少广泛的数据集(51个特征,约1300个个体),如下所示: 1) 将我的列命名为一个列表: features = indi_prep_df.select([c for c in indi_prep_df.columns if c not in{'indi_nbr','label'}]).columns 2) 导入必要的库 from pyspark.ml.feature import PCA as PCAML from pyspark.ml.lina

我正试图通过ml.linalg方法使用PCA减少广泛的数据集(51个特征,约1300个个体),如下所示:

1) 将我的列命名为一个列表:

features = indi_prep_df.select([c for c in indi_prep_df.columns if c not in{'indi_nbr','label'}]).columns
2) 导入必要的库

from pyspark.ml.feature import PCA as PCAML
from pyspark.ml.linalg import Vector
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.linalg import DenseVector
3) 将要素收拢为一个密集扇区

indi_feat = indi_prep_df.rdd.map(lambda x: (x[0], x[-1], DenseVector(x[1:-2]))).toDF(['indi_nbr','label','features'])
4) 删除了除要保留索引的功能以外的所有内容:

dftest = indi_feat.drop('indi_nbr','label')
5) 实例化PCA对象

dfPCA = PCAML(k=3, inputCol="features", outputCol="pcafeats")
6) 并试图拟合模型

PCAout = dfPCA.fit(dftest)
但我的模型无法收敛(错误如下)。 我尝试过的事情: -平均填充或零填充NA和空值(视情况而定) -减少功能的数量(到25个,然后我切换到SKlearn的PCA)

我的配置是针对50个6GB/executor的执行器,所以我不认为这是因为没有足够的资源(我在这里没有看到任何关于资源的内容)

我的输入因子是百分比、整数和2位小数浮点数的混合体,都是正数和序数。这是否会导致收敛困难


一旦我将PySpark DF转换为Pandas DF,我对SKLearn方法的收敛并没有任何问题。

我面临着完全相同的情况。任何帮助都将不胜感激。
    Py4JJavaError: An error occurred while calling o2242.fit.
: breeze.linalg.NotConvergedException: 
    at breeze.linalg.svd$.breeze$linalg$svd$$doSVD_Double(svd.scala:110)
    at breeze.linalg.svd$Svd_DM_Impl$.apply(svd.scala:40)
    at breeze.linalg.svd$Svd_DM_Impl$.apply(svd.scala:39)
    at breeze.generic.UFunc$class.apply(UFunc.scala:48)
    at breeze.linalg.svd$.apply(svd.scala:23)
    at org.apache.spark.mllib.linalg.distributed.RowMatrix.computePrincipalComponentsAndExplainedVariance(RowMatrix.scala:389)
    at org.apache.spark.mllib.feature.PCA.fit(PCA.scala:48)
    at org.apache.spark.ml.feature.PCA.fit(PCA.scala:99)
    at org.apache.spark.ml.feature.PCA.fit(PCA.scala:70)