164 votes

Afficher des valeurs de colonne distinctes dans un dataframe Pyspark

Avec le dataframe pyspark, comment faire l'équivalent de df['col'].unique() dans Pandas.

Je veux répertorier toutes les valeurs uniques dans une colonne d'un dataframe pyspark.

Je ne veux pas faire la méthode SQL (registertemplate puis requête SQL pour les valeurs distinctes).

Je ne veux pas non plus utiliser groupby puis countDistinct, je préfère vérifier les VALEURS distinctes dans cette colonne.

8voto

muon Points 2813

Vous pourriez faire

distinct_column = 'somecol' 

distinct_column_vals = df.select(distinct_column).distinct().collect()
distinct_column_vals = [v[distinct_column] for v in distinct_column_vals]

3voto

ansev Points 26199

En plus de l'option dropDuplicates, il y a la méthode nommée comme on le sait dans pandas drop_duplicates :

drop_duplicates() est un alias pour dropDuplicates().

Exemple

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

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

Supprimer selon un sous-ensemble

s_df.drop_duplicates(subset = ['k']).show()

+---+---+
|  k|  v|
+---+---+
|bar|  2|
|foo|  1|
+---+---+
s_df.drop_duplicates().show()

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

2voto

Kapil Sharma Points 11

Si vous voulez sélectionner TOUTES les données (colonnes) comme distinctes d'un DataFrame (df), alors

df.select('*').distinct().show(10,truncate=False)

1voto

Joseph Jacob Points 95

Exécutez ceci d'abord

df.createOrReplaceTempView('df')

Ensuite, exécutez

spark.sql("""
    SELECT distinct
        nom de colonne
    FROM
        df
    """).show()

0 votes

La requête consiste à ne pas utiliser la syntaxe SQL dans pyspark. Une façon pure de distinguer en pyspark était la demande.

0voto

Marioanzas Points 536

Supposons que votre DataFrame original s'appelle df. Ensuite, vous pouvez utiliser :

df1 = df.groupBy('column_1').agg(F.count('column_1').alias('trip_count'))
df2 = df1.sort(df1.trip_count.desc()).show()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X