Mostrar valores de columna distintos en el marco de datos de pyspark

Resuelto Satya asked hace 7 años • 15 respuestas

Con pyspark dataframe, ¿cómo se hace el equivalente de Pandas df['col'].unique()?

Quiero enumerar todos los valores únicos en una columna de marco de datos de pyspark.

No del tipo SQL (plantilla de registro y luego consulta SQL para valores distintos).

Además, no groupbylo necesito countDistinct, sino que quiero verificar VALORES distintos en esa columna.

Satya avatar Sep 08 '16 13:09 Satya
Aceptado

Esto debería ayudar a obtener valores distintos de una columna:

df.select('column1').distinct().collect()

Tenga en cuenta que .collect()no tiene ningún límite incorporado sobre la cantidad de valores que se pueden devolver, por lo que esto puede ser lento; utilícelo .show()en su lugar o agregue .limit(20)antes .collect()para administrar esto.

Pabbati avatar Nov 01 '2017 00:11 Pabbati

Supongamos que estamos trabajando con la siguiente representación de datos (dos columnas ky v, donde kcontiene tres entradas, dos únicas:

+---+---+
|  k|  v|
+---+---+
|foo|  1|
|bar|  2|
|foo|  3|
+---+---+

Con un marco de datos de Pandas:

import pandas as pd
p_df = pd.DataFrame([("foo", 1), ("bar", 2), ("foo", 3)], columns=("k", "v"))
p_df['k'].unique()

Esto devuelve un ndarray, es decirarray(['foo', 'bar'], dtype=object)

Solicitó una "alternativa de marco de datos de pyspark para pandas df['col'].unique()". Ahora, dado el siguiente marco de datos de Spark:

s_df = sqlContext.createDataFrame([("foo", 1), ("bar", 2), ("foo", 3)], ('k', 'v'))

Si desea el mismo resultado de Spark, es decir ndarray, use toPandas():

s_df.toPandas()['k'].unique()

Alternativamente, si no necesita ndarrayespecíficamente y solo desea una lista de los valores únicos de la columna k:

s_df.select('k').distinct().rdd.map(lambda r: r[0]).collect()

Finalmente, también puedes usar una lista por comprensión de la siguiente manera:

[i for i in s_df.select('k').distinct().collect()]
eddies avatar Sep 08 '2016 07:09 eddies

Puede utilizarlo df.dropDuplicates(['col1','col2'])para obtener solo filas distintas según colX en la matriz.

seufagner avatar May 30 '2017 04:05 seufagner