Есть ли способ получить каждый элемент списка без использования для L oop? - PullRequest
0 голосов
/ 05 марта 2020

есть ли способ получить каждый элемент списка без использования для l oop?

т.е. заданные данные

+----+---------+-------------+----------+-----------+
|  id|     date|   revenue   |con_dist_1| con_dist_2|
+----+---------+-------------+----------+-----------+
|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|
+----+---------+-------------+----------+-----------+

val col_list = Array("con_dist_1","con_dist_2")

val median_col_list = partitioned_data.stat.approxQuantile(col_list, Array(0.0,0.1,0.5),0.0)


val percentile_0 = 0;
val percentile_10 = 1;


val Q0 = median_col_list(col_list.indexOf("con_dist_1"))(percentile_0)
val Q10 =median_col_list(col_list.indexOf("con_dist_1"))(percentile_10)

Без циклического выбора col_list, есть ли способ вычисления процентиль_0 и процентиль_10 для каждого элемента в col_list, я имею в виду параллельно ... используя карту или что-то в этом роде *

1 Ответ

1 голос
/ 06 марта 2020

Я отвечу: «Как рассчитать несколько (приблизительных) процентилей за один проход для нескольких столбцов»?

Согласно документам 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))
...