过滤Apache Spark 2.1中Vector类型的Dataframe列

时间:2017-06-21 14:48:36

标签: java apache-spark apache-spark-sql

所以我正在研究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

我有什么想法可以解决并解决这个问题吗?

0 个答案:

没有答案