从 Java 中的 Spark 数据集中获取唯一词
Posted
技术标签:
【中文标题】从 Java 中的 Spark 数据集中获取唯一词【英文标题】:Get unique words from Spark Dataset in Java 【发布时间】:2017-05-31 19:21:39 【问题描述】:我正在使用 Apache Spark 2 来标记一些文本。
Dataset<Row> regexTokenized = regexTokenizer.transform(data);
它返回字符串数组。
Dataset<Row> words = regexTokenized.select("words");
示例数据如下所示。
+--------------------+
| words|
+--------------------+
|[very, caring, st...|
|[the, grand, cafe...|
|[i, booked, a, no...|
|[wow, the, places...|
|[if, you, are, ju...|
现在,我想获得所有独特的单词。我尝试了几个过滤器、flatMap、map 函数和 reduce。我无法弄清楚,因为我是 Spark 的新手。
【问题讨论】:
【参考方案1】:根据@Haroun Mohammedi 的回答,我能够在 Java 中找到答案。
Dataset<Row> uniqueWords = regexTokenized.select(explode(regexTokenized.col("words"))).distinct();
uniqueWords.show();
【讨论】:
【参考方案2】:我来自 scala,但我相信 Java 中也有类似的方法。
我认为在这种情况下,您必须使用 explode
方法才能将您的数据转换为 Dataset
的单词。
这段代码应该会给你想要的结果:
import org.apache.spark.sql.functions.explode
val dsWords = regexTokenized.select(explode("words"))
val dsUniqueWords = dsWords.distinct()
爆炸方法请参考official documentation
希望对你有帮助。
【讨论】:
以上是关于从 Java 中的 Spark 数据集中获取唯一词的主要内容,如果未能解决你的问题,请参考以下文章
获取 Apache spark 数据集中包含的列的列数据类型
无法使用 spark scala 从数据集中的行中获取第一列的值
使用 Java 在 Apache Spark 中从数据集中复制一行 n 次