在我的Spark ML Pipeline(Spark 2.3.0)中我使用RegexTokenizer如下:
val regexTokenizer = new RegexTokenizer()
.setInputCol("text")
.setOutputCol("words")
.setMinTokenLength(3)
它转换DataFrame为具有单词数组的那个,例如:
a the | [the]
a of to | []
big small | [big,small]
如何使用空[]数组过滤行?我应该创建自定义变换器并将其传递给管道吗?
你可以使用SQLTransformer:
import org.apache.spark.ml.feature.SQLTransformer
val emptyRemover = new SQLTransformer().setStatement(
"SELECT * FROM THIS WHERE size(words) > 0"
)
这个可以直接申请
val df = Seq(
("a the", Seq("the")), ("a of the", Seq()),
("big small", Seq("big", "small"))
).toDF("text", "words")
emptyRemover.transform(df).show | |
---|---|
text | words |
a the | [the] |
big small | [big, small] |
或用于Pipeline。
在Spark ML过程中使用它之前我会考虑两次。通常在下游使用的工具,例如CountVectorizer,可以很好地处理空输入:
import org.apache.spark.ml.feature.CountVectorizer
val vectorizer = new CountVectorizer()
.setInputCol("words")
.setOutputCol("features")
+---------+------------+-------------------+
text | words | features |
---|---|---|
a the | [the] | (3,[2],[1.0]) |
a of the | [] | (3,[],[]) |
big small | [big, small] | (3,[0,1],[1.0,1.0]) |
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。