У меня такая ситуация:
scala> val values = Seq((7,-1),(null,null),(1,0),(null,3),(2,5),(-1,null)).toDF("price","size")
scala> values.createOrReplaceTempView("mydata")
scala> sqlContext.sql("select percentile(price,0.5), percentile(size,0.5) from mydata").show()
+-----------------------------------------+----------------------------------------+
|percentile(price, CAST(0.5 AS DOUBLE), 1)|percentile(size, CAST(0.5 AS DOUBLE), 1)|
+-----------------------------------------+----------------------------------------+
| 1.5| 1.5|
+-----------------------------------------+----------------------------------------+
Есть ли способ отфильтровать значения для price
и size
на основании какого-либо условия? Например, скажем, я хочу включить только значения> 0. В Postgres я могу сделать что-то вроде этого:
select
percentile_cont (0.5) within group (order by price) filter (where price > 0),
percentile_cont (0.5) within group (order by size) filter (where size > 0)
from (values (7,-1),(null,null),(1,0),(null,3),(2,5),(-1,null)) T(price,size);
percentile_cont | percentile_cont
-----------------+-----------------
2 | 4
Что-нибудь похожее для SparkSQL?