Tengo el siguiente Chispa dataframe :

 agent_id|payment_amount|
+--------+--------------+
|       a|          1000|
|       b|          1100|
|       a|          1100|
|       a|          1200|
|       b|          1200|
|       b|          1250|
|       a|         10000|
|       b|          9000|
+--------+--------------+

mi deseo salida sería algo así como

agen_id   95_quantile
  a          whatever is 95 quantile for agent a payments
  b          whatever is 95 quantile for agent b payments

para cada grupo de agent_id necesito calcular el 0.95 cuantil, me tome el siguiente enfoque:

test_df.groupby('agent_id').approxQuantile('payment_amount',0.95)

pero me tome el siguiente error:

'GroupedData' object has no attribute 'approxQuantile'

Necesito tener .95 cuantil(percentil) en una nueva columna para que después se puede usar para filtrar los efectos de

Estoy usando Chispa 2.0.0

  • approxQuantile no está disponible en la versión 2 de la chispa

1 Comentario

  1. 11

    Una solución sería el uso de percentile_approx :

    >>> test_df.registerTempTable("df")
    >>> df2 = sqlContext.sql("select agent_id, percentile_approx(payment_amount,0.95) as approxQuantile from df group by agent_id")
    
    >>> df2.show()
    # +--------+-----------------+
    # |agent_id|   approxQuantile|
    # +--------+-----------------+
    # |       a|8239.999999999998|
    # |       b|7449.999999999998|
    # +--------+-----------------+ 

    Nota 1 : Esta solución se ha probado con chispa 1.6.2 y requiere de un HiveContext.

    Nota 2 : approxQuantile no está disponible en la Chispa de la < 2.0 para pyspark.

    Nota 3 : percentile devuelve un valor aproximado de pth percentil de una columna numérica (incluyendo los tipos de punto flotante) en el grupo. Cuando el número de valores distintos en la col es menor que el segundo argumento de valor, esto le da una exacta el valor de percentil.

    EDICIÓN : De Chispa 2+, HiveContext no es necesario.

    • gracias, voy a probarlo , por favor me corrija si me equivoco , la razón me sale que error es que approxQuantile no es una función de agregado?
    • approxQuantile es un stat de la función, de hecho no es una función de agregado.
    • gracias 1.hay alguna forma de aplicar stat funciones de grupo de datos? 2. es posible crear un wrapper) de python de la Colmena contexto?
    • No estoy seguro. Tengo que probar primero. hiveContext debe estar disponible si no me equivoco en pyspark usted sólo tiene el derecho de construir.
    • seguro que yo lo hice, gracias , sólo la última pregunta : utilizando Hivecontext y tabla temporal es nuestra solución escalable?
    • por supuesto, esto no meterse con la escalabilidad. HiveContext es sólo un superconjunto de un SQLContext con algunas funciones extra, Udf y UDAFs
    • llegar java.lang.NoSuchMethodError: sun.nio.ch.DirectBuffer.cleaner()Lsun/misc/Cleaner; de error cuando se utilicen percentile_approx método.
    • comprobar si los paquetes de la versión son compatibles (chispa paquetes de versión debe ser la misma)

Dejar respuesta

Please enter your comment!
Please enter your name here