Я новичок в программировании Spark, и мне нужно выполнить некоторые тесты для функций sampleByKey и sampleByKeyExact.Я наконец заставил их работать для небольшого набора данных, но теперь нужно запустить их для гораздо большего.В конце мне нужно будет посчитать по ключу выход этих сэмплеров.Я перепробовал все виды groupBys, которые мог найти, и несколько методов преобразования этого 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, что точный образец - это объект 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)
Спасибо