我是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)
谢谢