web-dev-qa-db-fra.com

affiche des valeurs de colonne distinctes dans pyspark dataframe: python

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.

59
Satya

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()]
64
eddies

Cela devrait aider à obtenir des valeurs distinctes d'une colonne:

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

Vous pouvez utiliser df.dropDuplicates(['col1','col2']) pour obtenir uniquement des lignes distinctes basées sur colX dans le tableau.

10
seufagner

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"]

2
Hari Baskar