从 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 次

使用自定义接收器从数据集中接收流数据 [Spark Streaming]

从大型数据集中提取唯一数据