Pandas에 대한 pyspark 데이터 프레임 대안을 제안하십시오 df['col'].unique()
.
pyspark 데이터 프레임 열의 모든 고유 값을 나열하고 싶습니다.
SQL 유형 방식이 아닙니다 (registertemplate 다음 고유 값에 대한 SQL 쿼리).
또한 필요하지 않으며 groupby->countDistinct
대신 해당 열에서 고유 한 값을 확인하고 싶습니다.
답변
다음과 같은 데이터 표현 (2 개의 열 k
및 v
, 여기 k
에 3 개의 항목, 2 개의 고유 한 항목 이 포함됨)으로 작업한다고 가정 해 보겠습니다 .
+---+---+
| k| v|
+---+---+
|foo| 1|
|bar| 2|
|foo| 3|
+---+---+
Pandas 데이터 프레임 사용 :
import pandas as pd
p_df = pd.DataFrame([("foo", 1), ("bar", 2), ("foo", 3)], columns=("k", "v"))
p_df['k'].unique()
이것은 ndarray
, 즉array(['foo', 'bar'], dtype=object)
“pandas df [ ‘col’]. unique ()”에 대한 pyspark 데이터 프레임 대안을 요청했습니다. 이제 다음 Spark 데이터 프레임이 주어집니다.
s_df = sqlContext.createDataFrame([("foo", 1), ("bar", 2), ("foo", 3)], ('k', 'v'))
Spark 에서 동일한 결과, 즉를 원한다면 다음을 ndarray
사용하십시오 toPandas()
.
s_df.toPandas()['k'].unique()
또는 ndarray
특별히 필요하지 않고 열의 고유 값 목록이 필요한 경우 k
:
s_df.select('k').distinct().rdd.map(lambda r: r[0]).collect()
마지막으로 다음과 같이 목록 이해를 사용할 수도 있습니다.
[i.k for i in s_df.select('k').distinct().collect()]
답변
이렇게하면 열의 고유 한 값을 얻는 데 도움이됩니다.
df.select('column1').distinct().collect()
주 .collect()
사용 – 어떤 내장 제한이 저하 될 수 있으므로 반환 할 수 있습니다 얼마나 많은 값이없는 .show()
대신하거나 추가 .limit(20)
하기 전에 .collect()
이 작업을 관리 할 수 있습니다.
답변
df.dropDuplicates(['col1','col2'])
배열의 colX를 기반으로하는 고유 한 행만 가져 오는 데 사용할 수 있습니다 .
답변
collect_set는 주어진 열에서 고유 한 값을 얻을하는 데 도움이 될 수 있습니다 pyspark.sql.DataFrame
df.select(F.collect_set("column").alias("column")).first()["column"]
답변
모든 (열) 데이터를 DataFrame (df)에서 고유 한 데이터로 선택하려면
df.select('*').distinct().show(10,truncate=False)
답변
당신은 할 수 있습니다
distinct_column = 'somecol'
distinct_column_vals = df.select(distinct_column).distinct().collect()
distinct_column_vals = [v[distinct_column] for v in distinct_column_vals]
답변
dropDuplicates
옵션 외에도 다음에서 알고있는 이름의 메서드가 있습니다 .pandas
drop_duplicates
drop_duplicates () 는 dropDuplicates () 의 별칭입니다 .
예
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|
+---+---+
하위 집합별로 삭제
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|
+---+---+