java - 如何使用 Spark 从多个文档中获取术语文档矩阵?

标签 java apache-spark text-mining apache-spark-mllib term-document-matrix

我正在尝试从多个文档生成术语文档矩阵。我可以从已经创建的矩阵运行 LDA 模型,现在我需要退一步。 我尝试实现一个简单的术语文档矩阵,但现在我陷入困境。我所做的是:

//GETS ALL FILES FROM INPUT PATH
JavaPairRDD<String, String> doc_words = context.wholeTextFiles(input_path);

//SPLIT BY " "
JavaPairRDD<String, String> tokenized = doc_words.flatMapValues(Preprocessing_DocumentTermMatrix.WORDS_EXTRACTOR);

//SEE METHOD WORDS_MAPPER.
JavaRDD<Tuple2<Tuple2<String, String>, Integer>> rdd = tokenized.flatMap(WORDS_MAPPER);


//METHOD WORDS_MAPPER
public static final FlatMapFunction<Tuple2<String, String>, Tuple2<Tuple2<String, String>, Integer>> WORDS_MAPPER = new FlatMapFunction<Tuple2<String, String>, Tuple2<Tuple2<String, String>, Integer>>() {

    public Iterable<Tuple2<Tuple2<String, String>, Integer>> call(Tuple2<String, String> stringIntegerTuple2) throws Exception {
        return Arrays.asList(new Tuple2<Tuple2<String, String>, Integer>(new Tuple2<String,String>(stringIntegerTuple2._1(), stringIntegerTuple2._2()), 1)); 
    } 
};

所以,这个函数给我一个这样的结果:

((DOC_0, TERM0), 1)
((DOC_0, TERM0), 1)
((DOC_0, TERM1), 1)
((DOC_1, TERM0), 1)
((DOC_1, TERM2), 1)

我想这没问题,但现在我需要减少它并提取如下输出:

(DOC_0, (TERM0, 2), (TERM1, 1))
(DOC_1, (TERM0, 1), (TERM2, 1))

我尝试了很多东西,但无法得到它......有人可以帮助我吗?

最佳答案

这是解决方案:

JavaPairRDD<String, Iterable<Tuple2<String, Integer>>> newrdd = JavaPairRDD.fromJavaRDD(rdd).reduceByKey((a, b) -> a + b)
                .mapToPair(t -> new Tuple2<>(t._1._1, new Tuple2<>(t._1._2, t._2))).groupByKey();

关于java - 如何使用 Spark 从多个文档中获取术语文档矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33002407/

相关文章:

java - 在 Play (Scala) 中使用 Guice 注释

java - 如何将数据插入二维多维数组?

apache-spark - 从云中的 Web 应用程序调用 Jupyter Notebook

scala - 使用朴素贝叶斯实现运行 Spark 作业时获取 NullPointerException

python - 如何提取数字之间的字符串? (并保留字符串中的第一个数字?)

java - 我需要做什么才能接受 web 服务中的数组参数?

java - 我可以使用方法而不是 Quartz 类来定义作业实例吗?

java - 在 RDD 中存储数组的有效方法

python - 将 scikit-learn TfIdf 与 gensim LDA 结合使用

r - 从列表中提取值和属性并将其转换为 R 中的数据框