¿Cómo usar las funciones de ventana en PySpark?

Estoy tratando de usar algunas funciones de Windows ( ntile y percentRank ) para un dataframe pero no sé cómo usarlas.

¿Puede alguien ayudarme con esto, por favor? En la documentación de la API de Python no hay ejemplos al respecto.

Específicamente, estoy tratando de obtener cuantiles de un campo numérico en mi dataframe.

Estoy usando chispa 1.4.0.

    Para poder utilizar la función de ventana, primero debe crear una ventana. La definición es bastante similar a la de SQL normal, lo que significa que puede definir cualquier orden, partición o ambos. Primero vamos a crear algunos datos ficticios:

     import numpy as np np.random.seed(1) keys = ["foo"] * 10 + ["bar"] * 10 values = np.hstack([np.random.normal(0, 1, 10), np.random.normal(10, 1, 100)]) df = sqlContext.createDataFrame([ {"k": k, "v": round(float(v), 3)} for k, v in zip(keys, values)]) 

    Asegúrese de que está utilizando HiveContext (Spark <2.0 solamente):

     from pyspark.sql import HiveContext assert isinstance(sqlContext, HiveContext) 

    Crear una ventana:

     from pyspark.sql.window import Window w = Window.partitionBy(df.k).orderBy(df.v) 

    que es equivalente a

     (PARTITION BY k ORDER BY v) 

    en SQL.

    Como regla general, las definiciones de la ventana siempre deben contener la cláusula PARTITION BY contrario, Spark moverá todos los datos a una sola partición. Se requiere ORDER BY para algunas funciones, mientras que en diferentes casos (generalmente agregados) puede ser opcional.

    También hay dos opciones opcionales que se pueden usar para definir el intervalo de ventanas: ROWS BETWEEN y RANGE BETWEEN . Estos no serán útiles para nosotros en este escenario particular.

    Finalmente podemos usarlo para una consulta:

     from pyspark.sql.functions import percentRank, ntile df.select( "k", "v", percentRank().over(w).alias("percent_rank"), ntile(3).over(w).alias("ntile3") ) 

    Tenga en cuenta que ntile no está relacionado de ninguna manera con los cuantiles.