structtype read pyspark pyspark-sql

read - muestra valores de columna distintos en el marco de datos pyspark: python



rdd to dataframe pyspark (4)

Sugiera la alternativa de marco de datos pyspark para Pandas df[''col''].unique() Unique df[''col''].unique() .

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

No es el tipo de SQL (plantilla de registro y consulta SQL para valores distintos).

Además, no necesito groupby->countDistinct , en cambio quiero verificar VALORES distintos en esa columna.


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

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


Puede usar df.dropDuplicates([''col1'',''col2'']) para obtener solo filas distintas basadas en colX en la matriz.


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 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)

Solicitó una "alternativa de marco de datos 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, un ndarray , use toPandas() :

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

Alternativamente, si no necesita un 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 puede usar una lista de comprensión de la siguiente manera:

[i.k for i in s_df.select(''k'').distinct().collect()]


collect_set puede ayudar a obtener valores únicos de una columna dada de pyspark.sql.DataFrame df.select(F.collect_set("column").alias("column")).first()["column"]