Я отвечу: «Как рассчитать несколько (приблизительных) процентилей за один проход для нескольких столбцов»?
Согласно документам DataFrameStatFunctions подпись
approxQuantile(cols: Array[String], probabilities: Array[Double], relativeError: Double): Array[Array[Double]]
доступна (только) с 2.2.0.
Если вы используете более старую версию Spark, у нее не будет этой подписи, и это будет не так просто сделать это вычисление.
Это пример из ваших данных с использованием Spark 2.4.0.
val df = Seq((3310,"1/15/2018",0.010680705,6,0.019875458),(3310,"1/15/2018",0.006628853,4,0.816039063),(3310,"1/15/2018",0.01378215,4,0.082049528),(3310,"1/15/2018",0.010680705,6,0.019875458),(3310,"1/15/2018",0.006628853,4,0.816039063),(3310,"1/15/2018",0.01378215,4,0.082049528),(3310,"1/15/2018",0.010680705,6,0.019875458),(3310,"1/15/2018",0.010680705,6,0.019875458),(3310,"1/15/2018",0.014933087,5,0.034681906),(3310,"1/15/2018",0.014448282,3,0.082049528)).toDF("id","date","revenue","con_dist_1","con_dist_2")
df.stat.approxQuantile(Array("con_dist_1", "con_dist_2"), Array(0.1, 0.5), 0)
Вывод (первое измерение - это столбец, а второе - запрошенный процентиль, поэтому, например, 10-й процентиль con_dist_1
равен 3,0):
Array[Array[Double]] = Array(Array(3.0, 4.0), Array(0.019875458, 0.034681906))