Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何将类型行转换为向量以馈送到KMeans_Apache Spark_Pyspark_K Means_Apache Spark Mllib_Pyspark Sql - Fatal编程技术网

Apache spark 如何将类型行转换为向量以馈送到KMeans

Apache spark 如何将类型行转换为向量以馈送到KMeans,apache-spark,pyspark,k-means,apache-spark-mllib,pyspark-sql,Apache Spark,Pyspark,K Means,Apache Spark Mllib,Pyspark Sql,当我尝试将df2馈送到kmeans时,我得到以下错误 clusters = KMeans.train(df2, 10, maxIterations=30, runs=10, initializationMode="random") 我得到的错误是: Cannot convert type <class 'pyspark.sql.types.Row'> into Vector 如何将这两列转换为Vector并将其提供给KMeans?M

当我尝试将df2馈送到kmeans时,我得到以下错误

clusters = KMeans.train(df2, 10, maxIterations=30,
                        runs=10, initializationMode="random")
我得到的错误是:

Cannot convert type <class 'pyspark.sql.types.Row'> into Vector
如何将这两列转换为Vector并将其提供给KMeans?

ML 问题是您错过了,很明显,方法序列需要一个以向量为特征的数据帧

要修改当前数据的结构,可以使用。在您的情况下,它可能类似于:

从pyspark.sql.functions导入* vectorAssembler=VectorAssemblerinputCols=[纬度,经度], outputCol=特征 对于使用字符串而不是双精度的特殊情况,您应该首先使用字符串。 expr=[colc.castDouble.aliasc 对于矢量汇编程序中的c.getInputCols] df2=df2。选择*expr df=矢量汇编程序.transformdf2 此外,还应该使用类对特征进行规范化,以获得更好的结果

MLLib 为了使用MLLib实现这一点,您需要首先使用map函数,将所有字符串值转换为Double,并在一个数组中将它们合并在一起

rdd=df2.maplambda数据:Vectors.dense[floatc表示数据中的c] 在这一点之后,您可以使用rdd变量来训练您的应用程序。

我让PySpark 2.3.1在a上执行以下操作:

编写要包含在聚类分析中的列的列表: 专长=纬度、经度` 您需要所有列都是数值: expr=[colc.castDouble.aliasc表示专长中的c] df2=df2。选择*expr 使用mllib.linalg.Vectors创建要素向量: 从pyspark.ml.feature导入向量汇编程序 汇编器=向量汇编器输入=专长,输出=特征 df3=汇编程序。transformdf2。选择“功能” 您应该规范化您的功能,因为规范化并不总是必需的,但它很少会造成伤害: 从pyspark.ml.feature导入StandardScaler 定标器=标准定标器 inputCol=特征, outputCol=缩放特征, with std=True, withMean=False scalerModel=scaler.fitdf3 df4=scalerModel.transformdf3.drop'features'\ .WithColumn重命名为'scaledFeatures','features' 将对象df4转化为密集向量: 从pyspark.mllib.linalg导入向量 data5=df4.rdd.maplambda行:Vectors.dense[x代表行中的x['features']] 使用获得的RDD对象作为KMeans培训的输入: 从pyspark.mllib.clustering导入KMeans 模型=KMeans.traindata5,k=3,最大迭代次数=10 示例:对向量空间中的点p进行分类: 预测=model.predictp
df = sqlContext.read.json("data/ALS3.json")
df2 = df.select('latitude','longitude')

df2.show()


     latitude|       longitude|

   60.1643075|      24.9460844|
   60.4686748|      22.2774728|