Apache Spark ML Pipeline:过滤数据集中的空行-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

Apache Spark ML Pipeline:过滤数据集中的空行

社区小助手 2018-12-12 13:55:33 1470

在我的Spark ML Pipeline(Spark 2.3.0)中我使用RegexTokenizer如下:

val regexTokenizer = new RegexTokenizer()

  .setInputCol("text")
  .setOutputCol("words")
  .setMinTokenLength(3)

它转换DataFrame为具有单词数组的那个,例如:

text | words

a the | [the]
a of to | []
big small | [big,small]
如何使用空[]数组过滤行?我应该创建自定义变换器并将其传递给管道吗?

apache数据集
分享到
取消 提交回答
全部回答(1)
  • 社区小助手
    2019-07-17 23:20:08

    你可以使用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])
    0 0
大数据
使用钉钉扫一扫加入圈子
+ 订阅

大数据计算实践乐园,近距离学习前沿技术

相似问题
最新问题