有两个非常大的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"))

10-05 20:27