如何在镶木地板文件中使用 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的主要内容,如果未能解决你的问题,请参考以下文章

在镶木地板的地图类型列上使用 spark-sql 过滤下推

Apache Arrow 使用 C++ 在镶木地板中编写嵌套类型

如何在MapReduce作业中以拼花文件格式编写输出?

AWS Redshift:如何存储大小大于 100K 的文本字段

如何将镶木地板格式的特定列加载到 Redshift 光谱中?

使用 pyspark 比较镶木地板文件的元数据