Mostrar valores de columna distintos en el marco de datos de pyspark
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 groupby
lo necesito countDistinct
, sino que quiero verificar VALORES distintos en esa columna.
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.
Supongamos que estamos trabajando con la siguiente representación de datos (dos columnas k
y v
, donde k
contiene 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 ndarray
especí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()]
Puede utilizarlo df.dropDuplicates(['col1','col2'])
para obtener solo filas distintas según colX en la matriz.