两个MapReduce如何相交

时间:2018-12-03 20:33:55

标签: java apache-spark mapreduce

我需要在两个文件中找到相同的单词。我使用Spark,Java。

任务: 对于两个文本文件,计算在第一个和第二个文件中同时出现的单词数。结果将作为键值对保存到文件中,其中key是常用单词的数量,value是单词本身。

问题: 如何正确做? 我首先使用wordcount在第一个文件中找到单词和该单词的出现次数,与第二个文件相似。 如何合并它们,只留下第一和第二个之间的共同点?

我加入他们,我得到了: (测试,(1,1)) (火花,(1,2))

我需要至少获得两个值,即 (测试1) (火花,1)

如何正确执行?

My edit code

2 个答案:

答案 0 :(得分:0)

如果在两个数据帧VALUE rb_io_puts(int argc, const VALUE *argv, VALUE out) { /* ... */ for (i=0; i<argc; i++) { /* ... */ line = rb_obj_as_string(argv[i]); /* outputting line here... */ } return Qnil; } VALUE rb_obj_as_string(VALUE obj) { VALUE str; // if obj is already a String, return it if (RB_TYPE_P(obj, T_STRING)) { return obj; } // call obj.to_s str = rb_funcall(obj, idTo_s, 0); // ensure it is a string return rb_obj_as_string_result(str, obj); } VALUE rb_obj_as_string_result(VALUE str, VALUE obj) { // if str isn't a String use Object#to_s if (!RB_TYPE_P(str, T_STRING)) return rb_any_to_s(obj); /* ... */ return str; } library(lubridate) library(data.table) setDT(df) df$timestamp_cast <- ymd_hms(df$yourtimestamp_col) df$desired_col <- NA df[hour(timestamp_cast) < 9, desired_col := as.Date(timestamp_cast)] df[hour(timestamp_cast) >= 9, desired_col := as.Date(timestamp_cast)+1] 中有(word,count),则可以使用内部联接。在Spark联接中,默认情况下是内部等联接,例如

   DoCmd.GoToRecord , , acLast
    Docmd.RunCommand acCmdDeleteRecord

将达到目的(这取决于您如何从df1和df2中命名单词/计数,您可能需要重命名某些列)。

答案 1 :(得分:0)

这是scala,但应足够简单以转换为java:

val f1 = spark.sparkContext.textFile("file1")
val w1 = f1.flatMap(_.split(" ")).toDF().distinct()
val f2 = spark.sparkContext.textFile("file2")
val w2 = f2.flatMap(_.split(" ")).toDF().distinct()
val result = w1.join(w2,w1("value")===w2("value"))