Я пытаюсь устранить следующую ошибку, я уже видел пару сообщений по этому вопросу, но не могу ее устранить. org. apache .spark. sql .AnalysisException: Невозможно разрешить имя "свойства" столбца среди * всех столбцов
Что я пробовал:
tempList = []
for col in Df.columns:
new_name = col.strip()
new_name = "".join(new_name.split())
new_name = new_name.replace('.','')
tempList.append(new_name)
Df = Df.toDF(*tempList)
У меня только 6 столбцов в моем кадре данных Spark, и у всех них ТОЛЬКО есть символы и подчеркивание. Схема для кадра данных:
StructType(List(StructField(A,ShortType,true),StructField(B,ShortType,true),StructField(C,IntegerType,true),StructField(D,IntegerType,true),StructField(E,StringType,true),StructField(F,DoubleType,true),StructField(G,IntegerType,true)))
Я пытаюсь реализовать PCA отсюда, https://www.nodalpoint.com/pca-in-spark-1-5/
Код для справки:
df = sc.parallelize([[1,2,3], [2,3,4]]).toDF(("a_1", "b", "c"))
def estimateCovariance(df):
m = df.select(df['features']).map(lambda x: x[0]).mean()
dfZeroMean = df.select(df['features']).map(lambda x: x[0]).map(lambda x: x-m) # subtract the mean
return dfZeroMean.map(lambda x: np.outer(x,x)).sum()/df.count()
def pca(df, k=2):
cov = estimateCovariance(df)
col = cov.shape[1]
eigVals, eigVecs = eigh(cov)
inds = np.argsort(eigVals)
eigVecs = eigVecs.T[inds[-1:-(col+1):-1]]
components = eigVecs[0:k]
eigVals = eigVals[inds[-1:-(col+1):-1]] # sort eigenvalues
score = df.select(df['features']).map(lambda x: x[0]).map(lambda x: np.dot(x, components.T) )
scoreDF = sqlContext.createDataFrame(score.map(lambda x: (DenseVector(x),)), ['pca_features'])
# Return the `k` principal components, `k` scores, and all eigenvalues
return components.T, scoreDF, eigVals
comp, score, eigVals = pca(df)
score.collect()
Есть идеи, что может пойти не так?