我需要在两个文件中找到相同的单词。我使用Spark,Java。
任务: 对于两个文本文件,计算在第一个和第二个文件中同时出现的单词数。结果将作为键值对保存到文件中,其中key是常用单词的数量,value是单词本身。
问题: 如何正确做? 我首先使用wordcount在第一个文件中找到单词和该单词的出现次数,与第二个文件相似。 如何合并它们,只留下第一和第二个之间的共同点?
我加入他们,我得到了: (测试,(1,1)) (火花,(1,2))
我需要至少获得两个值,即 (测试1) (火花,1)
如何正确执行?
答案 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"))