Veuillez suggérer une alternative à pyspark dataframe pour Pandas df['col'].unique()
.
Je souhaite répertorier toutes les valeurs uniques dans une colonne pyspark dataframe.
Ce n'est pas le type de SQL (enregistrez ensuite dans une requête SQL pour des valeurs distinctes).
De plus, je n'ai pas besoin de groupby->countDistinct
, mais je veux vérifier des VALEURS distinctes dans cette colonne.
Supposons que nous travaillions avec la représentation suivante des données (deux colonnes, k
et v
, où k
contient trois entrées, deux uniques:
+---+---+
| k| v|
+---+---+
|foo| 1|
|bar| 2|
|foo| 3|
+---+---+
Avec un Pandas _ dataframe:
import pandas as pd
p_df = pd.DataFrame([("foo", 1), ("bar", 2), ("foo", 3)], columns=("k", "v"))
p_df['k'].unique()
Ceci retourne un ndarray
, c'est-à-dire array(['foo', 'bar'], dtype=object)
Vous avez demandé une "alternative au cadre de données pyspark pour pandas df ['col']. Unique ()". Maintenant, étant donné le Spark dataframe suivant:
s_df = sqlContext.createDataFrame([("foo", 1), ("bar", 2), ("foo", 3)], ('k', 'v'))
Si vous voulez que le résultat identique de Spark, c’est-à-dire un ndarray
, utilisez toPandas()
:
s_df.toPandas()['k'].unique()
Sinon, si vous n'avez pas spécifiquement besoin d'un ndarray
et souhaitez simplement une liste des valeurs uniques de la colonne k
:
s_df.select('k').distinct().rdd.map(lambda r: r[0]).collect()
Enfin, vous pouvez également utiliser une liste de compréhension comme suit:
[i.k for i in s_df.select('k').distinct().collect()]
Cela devrait aider à obtenir des valeurs distinctes d'une colonne:
df.select('column1').distinct().show()
Vous pouvez utiliser df.dropDuplicates(['col1','col2'])
pour obtenir uniquement des lignes distinctes basées sur colX dans le tableau.
collect_set peut aider à obtenir des valeurs uniques à partir d'une colonne donnée de pyspark.sql.DataFramedf.select(F.collect_set("column").alias("column")).first()["column"]