如何在预处理spark

时间:2017-05-08 16:24:13

标签: apache-spark-sql stanford-nlp apache-spark-mllib apache-spark-ml sparkcore

我需要在运行算法之前预先处理spark中的数据 其中一个预处理逻辑是从文本中删除停用词。我尝试使用spark StopWordsRemover。 StopWordsRemover要求输入和输出应该是Array [String]。运行程序后,最后一列输出显示为字符串集合,我需要一个纯字符串。

我的代码如下。

val tokenizer: RegexTokenizer = new RegexTokenizer().setInputCol("raw").setOutputCol("token")
val stopWordsRemover = new StopWordsRemover().setInputCol("token").setOutputCol("final")
stopWordsRemover.setStopWords(stopWordsRemover.getStopWords ++ customizedStopWords)
val tokenized: DataFrame = tokenizer.transform(hiveDF)
val transformDF = stopWordsRemover.transform(tokenized)

实际输出

["rt messy support need help with bill"]

必需输出:

rt messy support need help with bill

我的输出应该像一个字符串,但不是字符串数组。有没有办法做到这一点。我要求数据框中列的输出为字符串。

另外,我需要提供以下选项的建议,以便从火花程序中的文本中删除停用词。

  1. 来自SparkMlib的StopWordsRemover
  2. Standford CoreNLP图书馆。
  3. 在解析大文件时,哪个选项可以提供更好的性能。

    任何帮助表示感谢。

    提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以使用此来获取字符串而不是字符串数组 - df.collect()[0] - 如果您确定只有第一项符合您的兴趣。

但是,只要您遍历数组并获取每个项目,这不应该是任何问题。

最终,HiveDF将为您提供RDD [String] - 当您从RDD转换时,它将变为Array [String]。