apachesparkjava8中的自连接示例
我有一个如下的数据集apachesparkjava8中的自连接示例,java,apache-spark,Java,Apache Spark,我有一个如下的数据集 Kolkata,30 Delhi,23 Lucknow,33 Lucknow,36 Delhi,31 Kolkata,34 Delhi,21 Kolkata,23 要进行自联接以获取表单的结果集 Lucknow -> (30, 36), Kolkata -> (30, 34), (34, 23), (23, 30). 如何使用Spark RDD实现这一点 JavaPairRDD<String, Integer> words = file.mapT
Kolkata,30
Delhi,23
Lucknow,33
Lucknow,36
Delhi,31
Kolkata,34
Delhi,21
Kolkata,23
要进行自联接以获取表单的结果集
Lucknow -> (30, 36), Kolkata -> (30, 34), (34, 23), (23, 30).
如何使用Spark RDD实现这一点
JavaPairRDD<String, Integer> words = file.mapToPair(s ->{
String[] temp = s.split(",");
return new Tuple2<String, Integer>(temp[0], new Integer(temp[1]));
});
JavaPairRDD<String, Iterable<Integer>> temp1 = words.groupByKey();
JavaPairRDD<String, Iterable<Integer>> temp2 = words.groupByKey();
JavaPairRDD<String, Tuple2<Iterable<Integer>, Iterable<Integer>>> words3 = temp2.join(temp1);
JavaPairRDD words=file.mapToPair(s->{
字符串[]temp=s.split(“,”);
返回新的Tuple2(temp[0],新的整数(temp[1]);
});
javapairdd temp1=words.groupByKey();
javapairdd temp2=words.groupByKey();
javapairdd words3=temp2.join(temp1);
现在如何迭代元组?要获得
的RDD,请在加入后使用.groupByKey()
JavaPairRDD<String, Iterable<Tuple2<Integer>>> result =
words.join(words).groupByKey()
和.groupByKey()
按键将所有值组合在一起,以便每个键只有一行,如下所示:
(Kolkata, [(30,34), (30,23), (34,23), ...])
要获取
的RDD,请在加入后使用.groupByKey()
JavaPairRDD<String, Iterable<Tuple2<Integer>>> result =
words.join(words).groupByKey()
和.groupByKey()
按键将所有值组合在一起,以便每个键只有一行,如下所示:
(Kolkata, [(30,34), (30,23), (34,23), ...])
对于每个唯一的键,rdd自连接产生值的置换对 要删除重复对(考虑到您的数据没有唯一键的重复值),filterduplicates()将从置换集中删除这些重复值对
//outside main function
type pair=(String,(Int,Int))
def filterduplicates(p:pair):Boolean={
return p._2._1<p._2._2
}
//insidemain
val rdd=sc.textFile("../cities.txt")
val mapped=rdd.map(l=>l.split(",")).map(l=>(l(0),l(1).toInt))
val joined=mapped.join(mapped)
//(Lucknow,(33,33)) (Lucknow,(33,36)) (Lucknow,(36,33)) (Lucknow,(36,36))
val grouped=joined.filter(filterduplicates)
//(Lucknow,(33,36))
val listt=grouped.groupByKey().mapValues(_.toList)
val finalresult=listt.collect()
finalresult.foreach(println)
//(Delhi,List((23,31), (21,23), (21,31)))(Kolkata,List((30,34),(23,30) (23,34))) (Lucknow,List((33,36)))
//主函数外部
类型对=(字符串,(Int,Int))
def filterduplicates(p:pair):布尔值={
返回p.2.1l.split(“,”).map(l=>(l(0),l(1.toInt))
val join=已映射。连接(已映射)
//(勒克瑙,(33,33))(勒克瑙,(33,36))(勒克瑙,(36,33))(勒克瑙,(36,36))
val分组=已联接。筛选器(筛选器副本)
//(勒克瑙,(33,36))
val listt=grouped.groupByKey().mapValues(u.toList)
val finalresult=listt.collect()
最终结果foreach(println)
//(德里,名单((23,31),(21,23),(21,31))(加尔各答,名单((30,34),(23,30)(23,34)))(勒克瑙,名单((33,36)))
对于每个唯一的键,rdd自连接产生值的置换对
要删除重复对(考虑到您的数据没有唯一键的重复值),filterduplicates()将从置换集中删除这些重复值对
//outside main function
type pair=(String,(Int,Int))
def filterduplicates(p:pair):Boolean={
return p._2._1<p._2._2
}
//insidemain
val rdd=sc.textFile("../cities.txt")
val mapped=rdd.map(l=>l.split(",")).map(l=>(l(0),l(1).toInt))
val joined=mapped.join(mapped)
//(Lucknow,(33,33)) (Lucknow,(33,36)) (Lucknow,(36,33)) (Lucknow,(36,36))
val grouped=joined.filter(filterduplicates)
//(Lucknow,(33,36))
val listt=grouped.groupByKey().mapValues(_.toList)
val finalresult=listt.collect()
finalresult.foreach(println)
//(Delhi,List((23,31), (21,23), (21,31)))(Kolkata,List((30,34),(23,30) (23,34))) (Lucknow,List((33,36)))
//主函数外部
类型对=(字符串,(Int,Int))
def filterduplicates(p:pair):布尔值={
返回p.2.1l.split(“,”).map(l=>(l(0),l(1.toInt))
val join=已映射。连接(已映射)
//(勒克瑙,(33,33))(勒克瑙,(33,36))(勒克瑙,(36,33))(勒克瑙,(36,36))
val分组=已联接。筛选器(筛选器副本)
//(勒克瑙,(33,36))
val listt=grouped.groupByKey().mapValues(u.toList)
val finalresult=listt.collect()
最终结果foreach(println)
//(德里,名单((23,31),(21,23),(21,31))(加尔各答,名单((30,34),(23,30)(23,34)))(勒克瑙,名单((33,36)))
我尝试使用groupByKey并再次创建一个副本并加入它们。我得到了JavaPairdd的形式。我需要迭代元组并评估自加入条件。不确定这是否是正确的方法请发布您在问题中尝试的代码!我想输出将与我尝试使用groupByKey并再次创建副本和加入他们。我得到了JavaPairRDD的形式。我需要通过元组进行迭代,并评估自连接条件。不确定这是否是正确的方法。请发布您在问题中尝试的代码!我认为输出将如下