我需要在运行算法之前预先处理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
我的输出应该像一个字符串,但不是字符串数组。有没有办法做到这一点。我要求数据框中列的输出为字符串。
另外,我需要提供以下选项的建议,以便从火花程序中的文本中删除停用词。
在解析大文件时,哪个选项可以提供更好的性能。
任何帮助表示感谢。
提前致谢。
答案 0 :(得分:0)
您可以使用此来获取字符串而不是字符串数组 - df.collect()[0]
- 如果您确定只有第一项符合您的兴趣。
但是,只要您遍历数组并获取每个项目,这不应该是任何问题。
最终,HiveDF将为您提供RDD [String] - 当您从RDD转换时,它将变为Array [String]。