Recuerda que en las ciencias informáticas un error casi siempere suele tener varias soluciones, por lo tanto nosotros te mostramos la mejor y más eficiente.
Solución:
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 cuántos valores pueden devolverse, por lo que esto podría ser lento; use .show()
en su lugar o añadir .limit(20)
antes de .collect()
para manejar esto.
Supongamos que estamos trabajando con la siguiente representación de datos (dos columnas, k
y v
dónde k
contiene tres entradas, dos únicas:
+---+---+
| k| v|
+---+---+
|foo| 1|
|bar| 2|
|foo| 3|
+---+---+
Con un dataframe 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 decir array(['foo', 'bar'], dtype=object)
Usted solicitó una “alternativa de marco de datos pyspark para pandas df[‘col’].unique()”. Ahora, dada la siguiente trama de datos de Spark:
s_df = sqlContext.createDataFrame([("foo", 1), ("bar", 2), ("foo", 3)], ('k', 'v'))
si quieres el mismo resultado de Spark, es decir, un ndarray
usar toPandas()
:
s_df.toPandas()['k'].unique()
Alternativamente, si no necesita un ndarray
específicamente y solo quiero 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 puede usar una lista de comprensión de la siguiente manera:
[i.k for i in s_df.select('k').distinct().collect()]
Puedes usar df.dropDuplicates(['col1','col2'])
para obtener solo filas distintas basadas en colX en el array.
Si crees que ha resultado provechoso este artículo, agradeceríamos que lo compartas con el resto entusiastas de la programación de esta manera contrubuyes a difundir esta información.