2016-09-22 5 views
4

ich folgende sparkdataframe haben:berechnen Quantil auf gruppierten Daten in Funkendataframe

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

mein Wunsch Ausgabe etwas wie

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

für jede Gruppe von agent_id ich brauche wäre, die 0,95 Quantil berechnen , nehme ich den folgenden Ansatz:

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

aber ich nehme den folgenden Fehler:

'GroupedData' object has no attribute 'approxQuantile' 

ich brauche so später .95 Quantil (Perzentil) in einer neuen Spalte haben kann für Filterzwecke

+0

@ zero323 ich würde mich über Ihre Hilfe freuen. – sanaz

+0

welche Version von Spark verwenden Sie? – eliasah

+0

@eliasah + 2.0.0 – sanaz

Antwort

9

Eine Lösung verwendet werden, wäre HiveContext und percentile_approx zu verwenden:

>>> 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| 
# +--------+-----------------+ 

Hinweis 1: Diese Lösung wurde mit Zündkerze 1.6.2 getestet.

Anmerkung 2:approxQuantile ist in Spark-< 2.0 für pyspark nicht zur Verfügung.

Hinweis 3:percentile gibt das ungefähre p-te Perzentil einer numerischen Spalte (einschließlich Fließkommatypen) in der Gruppe zurück. Wenn die Anzahl der unterschiedlichen Werte in col kleiner als der zweite Argumentwert ist, ergibt dies einen exakten Perzentilwert.

+0

danke, ich werde es testen, bitte korrigieren Sie mich, wenn ich falsch liege, der Grund, warum ich diesen Fehler bekommen ist, dass approxQuantile ist keine Aggregatfunktion? – sanaz

+0

approxQuantile ist eine Statistikfunktion, in der Tat ist es keine Aggregatfunktion. – eliasah

+0

danke 1. gibt es eine Möglichkeit, stat Funktionen auf eine Gruppe von Daten anzuwenden? 2. Ist es möglich, einen Python-Wrapper für den Hive-Kontext zu erstellen? – sanaz

Verwandte Themen