如何在镶木地板文件中使用 K-means
Posted
技术标签:
【中文标题】如何在镶木地板文件中使用 K-means【英文标题】:How to use K-means with parquet file 【发布时间】:2020-01-17 10:05:58 【问题描述】:我想学习如何在 Spark 上使用 K-Means 算法。 我有一个镶木地板文件,我想用 k-means 分析它。如何告诉 spark 仅分析特定列?如何从行中删除空值?有人可以编写一个简单的代码来说明如何做到这一点吗? 谢谢
【问题讨论】:
这是4题合1! :) 阅读镶木地板,运行 k-means,仅选择某些列,并删除空值...如果您遇到任何问题,您至少应该先尝试,然后再提出更具体的问题 【参考方案1】:如果您想要特定的列,只需在数据框上进行选择,然后使用 VectorAssembler。 KMeans 需要向量列作为输入特征。 您可以使用 DataFrameNaFunctions 删除、填充或替换空值。
请看下面的例子:
val dataset= spark.range(10)
.select('id.cast("double").as("c1"),lit('id/2).as("c2").cast("double"))
val assembler = new VectorAssembler()
.setInputCols(dataset.columns)
.setOutputCol("myFeatures")
val output = assembler.transform(dataset)
// Trains a k-means model.
val kmeans = new KMeans().setK(2).setSeed(1L).setFeaturesCol("myFeatures")
val model = kmeans.fit(output)
// Make predictions
val predictions = model.transform(output)
predictions.show()
+---+---+----------+----------+
| c1| c2|myFeatures|prediction|
+---+---+----------+----------+
|0.0|0.0| (2,[],[])| 1|
|1.0|0.5| [1.0,0.5]| 1|
|2.0|1.0| [2.0,1.0]| 1|
|3.0|1.5| [3.0,1.5]| 1|
|4.0|2.0| [4.0,2.0]| 1|
|5.0|2.5| [5.0,2.5]| 0|
|6.0|3.0| [6.0,3.0]| 0|
|7.0|3.5| [7.0,3.5]| 0|
|8.0|4.0| [8.0,4.0]| 0|
|9.0|4.5| [9.0,4.5]| 0|
+---+---+----------+----------+
【讨论】:
我阅读了镶木地板,但是当我尝试使用 VectorAssembler 时,它给了我一个错误。val dataset = file.select("_country", "latitude", "longitude", "name").drop() val assembler = new VectorAssembler() .setInputCols(Array("latitude", "longitude")) .setOutputCol("location")
Caused by: org.apache.spark.SparkException: Failed to execute user defined function($anonfun$3: (struct<latitude:double,longitude:double>) => vector)
idk 空 .drop() 在做什么?试试这个:dataset = file.select("latitude", "longitude") val assembler = new VectorAssembler() .setInputCols(dataset.columns) .setOutputCol("location")
以上是关于如何在镶木地板文件中使用 K-means的主要内容,如果未能解决你的问题,请参考以下文章
Apache Arrow 使用 C++ 在镶木地板中编写嵌套类型
AWS Redshift:如何存储大小大于 100K 的文本字段