有两个非常大的RDD(每个都有超过百万个记录),第一个是:
rdd1.txt(name,value):
chr1 10016
chr1 10017
chr1 10018
chr1 20026
chr1 20036
chr1 25016
chr1 26026
chr2 40016
chr2 40116
chr2 50016
chr3 70016
rdd2.txt(name,min,max):
chr1 10000 20000
chr1 20000 30000
chr2 40000 50000
chr2 50000 60000
chr3 70000 80000
chr3 810001 910000
chr3 860001 960000
chr3 910001 1010000
该值仅在第二个RDD的最小值和最大值之间的范围内才有效,如果有效,名称的计数将加1
以上面的示例为例,chr1的发生为7。
我如何在Scala中获得带有Spark的结果?
非常感谢
最佳答案
尝试:
val rdd1 = sc.parallelize(Seq(
("chr1", 10016 ), ("chr1", 10017), ("chr1", 10018)))
val rdd2 = sc.parallelize(Seq(
("chr1", 10000, 20000), ("chr1",20000, 30000)))
rdd1.toDF("name", "value").join(rdd2.toDF("name", "min", "max"), Seq("name"))
.where($"value".between($"min", $"max"))