通常pyspark.ml.feature.IDF返回一个包含SparseVector的outputCol。我需要的是让N列具有实数值,其中N是IDF中定义的许多功能(稍后在catboost中使用该数据框)。
我试图将列转换为数组
def dense_to_array(v):
new_array = list([float(x) for x in v])
return new_array
dense_to_array_udf = F.udf(dense_to_array, T.ArrayType(T.FloatType()))
data = data.withColumn('tf_idf_features_array', dense_to_array_udf('tf_idf_features'))
然后使用Pandas转换为列
data = data.toPandas()
cols = [f'tf_idf_{i}' for i in range(32)]
data = pd.DataFrame(info['tf_idf_features_array'].values.tolist(), columns=cols)
我不喜欢这样,因为我发现它真的很慢。有没有办法在没有熊猫的情况下通过pyspark解决我的问题?