所以我正在研究Apache Spark中的异常值检测问题,基本上我找到异常值的方法是使用聚类方法(k-means)来聚类我的数据集,然后将这些聚类与一个数据点分类为异常。这是我的第一个方法,到目前为止它一直在努力。
无论如何,为了使这项工作,我需要过滤特征列(它是矢量类型)并选择其值等于KMeansModel返回的任何集群中心Vector数组的那个。但是,当我尝试这样做时,我收到以下错误:
Exception in thread "main" java.lang.RuntimeException: Unsupported literal type class org.apache.spark.ml.linalg.DenseVector [1326.5,108633.25]
这是涉及过滤的代码:
Dataset<Row> day1 = spark.read().
option("header", "true").
option("delimiter", "\t").
option("inferSchema", "true").
csv(day1txt);
VectorAssembler assembler = new VectorAssembler()
.setInputCols(new String[]{"Size", "Records"})
.setOutputCol("features");
Dataset<Row> day1vector = assembler.transform(day1);
BisectingKMeans kmeans = new BisectingKMeans().setSeed(1l);
BisectingKMeansModel model = kmeans.fit(day1vector);
Vector[] v = model.clusterCenters();
//I assume v[1] is anomalous in this case
day1vector.filter(day1vector.col("features").equalTo(v[1])).show(); //this provokes the error
我有什么想法可以解决并解决这个问题吗?