Załóżmy, że pracujemy z następującą reprezentacją danych (dwie kolumny k
i v
, jeśli k
zawiera trzy wpisy, dwie unikalne):
+---+---+
| k| v|
+---+---+
|foo| 1|
|bar| 2|
|foo| 3|
+---+---+
Z ramką danych Pandas:
import pandas as pd
p_df = pd.DataFrame([("foo", 1), ("bar", 2), ("foo", 3)], columns=("k", "v"))
p_df['k'].unique()
Zwraca to ndarray
, tjarray(['foo', 'bar'], dtype=object)
Poprosiłeś o „alternatywną ramkę danych pyspark dla pandas df ['col']. Unique ()”. Teraz, biorąc pod uwagę następującą ramkę danych Spark:
s_df = sqlContext.createDataFrame([("foo", 1), ("bar", 2), ("foo", 3)], ('k', 'v'))
Jeśli chcesz uzyskać ten sam wynik ze Sparka, tj. ndarray
Użyj toPandas()
:
s_df.toPandas()['k'].unique()
Alternatywnie, jeśli nie potrzebujesz ndarray
konkretnego i po prostu chcesz listę unikalnych wartości kolumny k
:
s_df.select('k').distinct().rdd.map(lambda r: r[0]).collect()
Na koniec możesz również użyć rozumienia listy w następujący sposób:
[i.k for i in s_df.select('k').distinct().collect()]
.rdd
połączenie podistinct()
. Działało bez tego w Spark 1.6.2, ale właśnie potwierdziłem, że edytowana odpowiedź działa również w Spark 2.0.0.Powinno to pomóc w uzyskaniu różnych wartości kolumny:
df.select('column1').distinct().collect()
Pamiętaj, że
.collect()
nie ma żadnego wbudowanego limitu liczby zwracanych wartości, więc może to być powolne - użyj.show()
zamiast tego lub dodaj.limit(20)
wcześniej,.collect()
aby to zarządzać.źródło
Możesz użyć,
df.dropDuplicates(['col1','col2'])
aby uzyskać tylko różne wiersze na podstawie colX w tablicy.źródło
collect_set może pomóc w uzyskaniu unikalnych wartości z danej kolumny pyspark.sql.DataFrame
df.select(F.collect_set("column").alias("column")).first()["column"]
źródło
Jeśli chcesz wybrać WSZYSTKIE (kolumny) dane jako odrębne z DataFrame (df), to
df.select('*').distinct().show(10,truncate=False)
źródło
mógłbyś
distinct_column = 'somecol' distinct_column_vals = df.select(distinct_column).distinct().collect() distinct_column_vals = [v[distinct_column] for v in distinct_column_vals]
źródło
Oprócz
dropDuplicates
opcji istnieje metoda nazwana tak, jak ją znamy w :pandas
drop_duplicates
Przykład
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| +---+---+
Upuść według podzbioru
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| +---+---+
źródło
Uruchom to najpierw
df.createOrReplaceTempView('df')
Następnie uruchomić
spark.sql(""" SELECT distinct column name FROM df """).show()
źródło
Jeśli chcesz zobaczyć różne wartości określonej kolumny w swojej ramce danych, wystarczy napisać -
df.select('colname').distinct().show(100,False)
Spowoduje to wyświetlenie 100 odrębnych wartości (jeśli dostępnych jest 100 wartości) dla kolumny Colname w ramce danych df.
Jeśli chcesz zrobić coś wymyślnego na odrębnych wartościach, możesz zapisać różne wartości w wektorze
a = df.select('colname').distinct()
W tym przypadku a miałoby wszystkie różne wartości kolumny kolumna
źródło