Spark groupBy并计数MapPartitionsRDD对象

时间:2019-02-01 20:21:19

标签: scala apache-spark apache-spark-sql rdd

我是Spark编程的新手,需要对sampleByKey和sampleByKeyExact函数进行一些基准测试。我终于让它们为一个小的数据集工作,但是现在需要为更大的数据集运行它们。最后,我将需要按键对这些采样器的输出进行计数。我尝试了所有可以找到的groupBy,并尝试了几种将RDD转换为DF以便在其上执行Spark SQL的方法。没有任何效果,我怀疑我从根本上没有低估正在使用的对象。如果可以的话,请帮忙。

我从看起来像这样的数据开始:

1,A
2,B
3,A

等等

然后我的采样器的输出是这样的:

(A,[1,A])
(A,[1,A])
(A,[1,A])
(A,[5,A])
(A,[5,A])
(A,[5,A])
(A,[13,A])

以此类推

我从IntelliJ调试器中看到,exactSample是MapPartitionsRDD @ 9605对象。我可以用

打印
exactSample.collect().foreach(println)

但就分组和计数,或将其转换为DF而言,仅此而已。

这是我要讲的代码:

  val data = spark.read.csv("/path/samplingData.txt")
  val dataRDD = data.rdd.keyBy(row => row.get(1).toString)
  val fractions = Map("A" -> 2.0, "B" -> 0.1, "C" -> 0.0, "D" -> 0.0)
  val approxSample = dataRDD.sampleByKey(withReplacement = true, fractions = fractions)
  val exactSample = dataRDD.sampleByKeyExact(withReplacement = true, fractions = fractions)
  exactSample.collect().foreach(println)

谢谢

0 个答案:

没有答案