簡體   English   中英

Spark 2.2.0:如何防止CountVectorizer從數據集中提供NoneZeroVector VectorsUDT

[英]Spark 2.2.0:How to prevent CountVectorizer giving NoneZeroVector VectorsUDT from Dataset

您好,社區,我是這里的新成員,我想提出一個簡單的傻問題。 我正在嘗試將文本文檔轉換為具有給定詞匯的矢量。 與spark示例相同。 我的問題是在某些情況下我會選擇空向量。 對我來說,做一些處理它很重要,但是我做不到!

這是我的代碼

 List<Row> data = Arrays.asList(
                RowFactory.create(Arrays.asList("zero", "zero", "zero")),
                RowFactory.create(Arrays.asList("a", "b", "c")),
                RowFactory.create(Arrays.asList("a", "b", "b", "c", "a"))
        );
        StructType schema = new StructType(new StructField[]{
                new StructField("text", new ArrayType(DataTypes.StringType, true), false, Metadata.empty())
        });
        Dataset<Row> df = spark.createDataFrame(data, schema);


         // alternatively, define CountVectorizerModel with a-priori vocabulary
        CountVectorizerModel cvm = new CountVectorizerModel(new String[]{"a", "b", "c"})
                .setInputCol("text")
                .setOutputCol("feature");

        cvm.transform(df).show(false);

這是輸出。 我想處理或刪除第一列,或將空向量實例化為0.0的任何其他選擇

+------------------+-------------------------+
|text              |feature                  |
+------------------+-------------------------+
|[zero, zero, zero]|(3,[],[])                |
|[a, b, c]         |(3,[0,1,2],[1.0,1.0,1.0])|
|[a, b, b, c, a]   |(3,[0,1,2],[2.0,2.0,1.0])|
+------------------+-------------------------+

如果有人可以在Java中幫助我,我將不勝感激

將空向量實例化為0.0

您不必做任何事情。 (3,[],[])不為空-這是一個SparseVector表示形式,等效於DenseVector [0.0, 0.0, 0.0] DenseVector [0.0, 0.0, 0.0]

刪除

您可以創建一個udf

import org.apache.spark.sql.api.java.UDF1;
import org.apache.spark.ml.linalg.Vector;

UDF1 isEmpty = new UDF1<Vector,Boolean>() {
    public Boolean call(Vector vector) throws Exception {
        return vector.toSparse().numActives() == 0;
    }
};

spark.udf().register("isEmpty", isEmpty, DataTypes.BooleanType);

並與SQLTransformer一起使用:

SQLTransformer sqlTrans = new SQLTransformer().setStatement(
  "SELECT * FROM __THIS__ WHERE NOT isEmpty(feature)");

但是請不要-“空”向量是有價值信息的來源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM