pyspark 데이터 프레임에 고유한 열 값 표시
Pyspark 데이터 프레임을 사용하여 Panda와 동등한 성능을 발휘하는 방법은 무엇입니까?df['col'].unique()
.
저는 pyspark 데이터 프레임 열에 있는 모든 고유 값을 나열하고 싶습니다.
SQL 유형 방식이 아닙니다(템플릿을 등록한 후 SQL 쿼리를 통해 고유한 값을 확인).
그리고 나는 필요 없습니다.groupby
그리고나서countDistinct
대신에 저는 그 열에서 고유한 값을 확인하고 싶습니다.
이렇게 하면 열의 고유한 값을 얻는 데 도움이 됩니다.
df.select('column1').distinct().collect()
참고:.collect()
반환할 수 있는 값 수에 대한 기본 제공 제한이 없기 때문에 속도가 느릴 수 있습니다..show()
대신 또는 추가.limit(20)
전에.collect()
이를 관리하기 위해.
다음과 같은 데이터 표현(두 개의 열,k
그리고.v
,어디에k
에는 고유한 두 개의 세 개의 항목이 포함됩니다.
+---+---+
| k| v|
+---+---+
|foo| 1|
|bar| 2|
|foo| 3|
+---+---+
Panda 데이터 프레임의 경우:
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)
"Pandersdf['col'을 위한 pyspark 데이터 프레임 대안"을 요청하셨습니다.독특한"이제 다음 스파크 데이터 프레임이 주어집니다.
s_df = sqlContext.createDataFrame([("foo", 1), ("bar", 2), ("foo", 3)], ('k', 'v'))
스파크에서 동일한 결과를 원한다면, 즉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.dropDuplicates(['col1','col2'])
배열에서 colX를 기준으로 고유한 행만 가져옵니다.
데이터 프레임에서 특정 열의 고유한 값을 보려면 다음 코드를 작성하면 됩니다.100개의 고유한 값을 표시합니다(100개의 값을 사용할 수 있는 경우).colname
의 란df
데이터 프레임
df.select('colname').distinct().show(100, False)
고유한 값을 원하는 경우 벡터에 고유한 값을 저장할 수 있습니다.
a = df.select('colname').distinct()
collect_set
의 주어진 열에서 고유한 값을 얻는 데 도움이 될 수 있습니다.pyspark.sql.DataFrame
:
df.select(F.collect_set("column").alias("column")).first()["column"]
할 수 있습니다
distinct_column = 'somecol'
distinct_column_vals = df.select(distinct_column).distinct().collect()
distinct_column_vals = [v[distinct_column] for v in distinct_column_vals]
다른 답변과 유사하지만 질문은 행 개체를 반환하는 것이 아니라 실제 값을 반환하는 것 같습니다.
이상적인 원라이너는df.select('column').distinct().collect().toPandas().column.to_list()
.collect(.collect)를 실행하는 것이 메모리에 비해 그리 크지 않을 것이라고 가정합니다.
추천합니다df.select('column').distinct().count()
먼저 크기를 측정하고 너무 크지 않은지 확인합니다.
옵션 외에도 drop_duplicates
다음과 같은 방법이 있습니다.
drop_duplates()는 dropDuplates()의 별칭입니다.
예
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|
+---+---+
데이터 프레임(df)에서 모든(열) 데이터를 구별하여 선택하려면,
df.select('*').distinct().show(10,truncate=False)
먼저 실행
df.createOrReplaceTempView('df')
그럼 실행
spark.sql("""
SELECT distinct
column name
FROM
df
""").show()
저는 이것이 가장 직관적인 (즉, 판다와 유사한) 구문이라고 생각합니다.
new_df = df[['col']].distinct() # returns a one-column pyspark dataframe
또는
new_col = df[['col']].distinct()['col'] # returns a pyspark column object.
필요한 목록으로 이동하려면 다음과 같이 하십시오.
new_list = df[['col']].distinct().rdd.map(lambda row: row.col).collect()
을 ""DataFrame"이라고 .df
그런 다음 다음을 사용할 수 있습니다.
df1 = df.groupBy('column_1').agg(F.count('column_1').alias('trip_count'))
df2 = df1.sort(df1.trip_count.desc()).show()
이것은 도움이 될 수 있습니다.
df.select(collect_set("your column")).show()
언급URL : https://stackoverflow.com/questions/39383557/show-distinct-column-values-in-pyspark-dataframe
'programing' 카테고리의 다른 글
클릭 후 VBA Excel 버튼 크기 조정(명령 버튼) (0) | 2023.06.20 |
---|---|
파이썬 루프의 'else' 절을 어떻게 이해할 수 있습니까? (0) | 2023.06.20 |
PL/SQL에서 문자열을 비교하는 방법은 무엇입니까? (0) | 2023.06.20 |
진술이란 무엇입니까?setFetchSize(nSize) 메서드가 SQL Server JDBC 드라이버에서 실제로 수행됩니까? (0) | 2023.06.20 |
WHERE 절과 함께 사용할 경우 Oracle CONNECT BY 최적화 (0) | 2023.06.20 |