Esta cuestión se puede solucionar de variadas formas, por lo tanto te enseñamos la que en nuestra opinión es la resolución más completa.
Solución:
Puede utilizar las funciones integradas para obtener estadísticas agregadas. Aquí se explica cómo obtener la media y la desviación estándar.
from pyspark.sql.functions import mean as _mean, stddev as _stddev, col
df_stats = df.select(
_mean(col('columnName')).alias('mean'),
_stddev(col('columnName')).alias('std')
).collect()
mean = df_stats[0]['mean']
std = df_stats[0]['std']
Tenga en cuenta que hay tres funciones de desviación estándar diferentes. De los documentos, el que usé (stddev
) devuelve lo siguiente:
Función agregada: devuelve la desviación estándar de muestra imparcial de la expresión en un grupo
Podrías usar el describe()
método también:
df.describe().show()
Consulte este enlace para obtener más información: pyspark.sql.functions
ACTUALIZAR: Así es como puede trabajar con los datos anidados.
Utilizar explode
para extraer los valores en filas separadas, luego llame mean
y stddev
como se muestra arriba.
Aquí hay un MWE:
from pyspark.sql.types import IntegerType
from pyspark.sql.functions import explode, col, udf, mean as _mean, stddev as _stddev
# mock up sample dataframe
df = sqlCtx.createDataFrame(
[(680, [[691,1], [692,5]]), (685, [[691,2], [692,2]]), (684, [[691,1], [692,3]])],
["product_PK", "products"]
)
# udf to get the "score" value - returns the item at index 1
get_score = udf(lambda x: x[1], IntegerType())
# explode column and get stats
df_stats = df.withColumn('exploded', explode(col('products')))
.withColumn('score', get_score(col('exploded')))
.select(
_mean(col('score')).alias('mean'),
_stddev(col('score')).alias('std')
)
.collect()
mean = df_stats[0]['mean']
std = df_stats[0]['std']
print([mean, std])
Qué salidas:
[2.3333333333333335, 1.505545305418162]
Puede verificar que estos valores son correctos usando numpy
:
vals = [1,5,2,2,1,3]
print([np.mean(vals), np.std(vals, ddof=1)])
Explicación: su "products"
la columna es una list
de list
s. Vocación explode
hará una nueva fila para cada elemento del exterior list
. Entonces agarra el "score"
valor de cada una de las filas explotadas, que ha definido como el segundo elemento en un elemento de 2 list
. Finalmente, llame a las funciones agregadas en esta nueva columna.
Reseñas y puntuaciones del tutorial
Si tienes alguna duda y capacidad de acrecentar nuestro reseña puedes añadir una disquisición y con mucho placer lo analizaremos.