Spark DataFrame groupBy 및 내림차순 정렬 (pyspark)


88

pyspark (Python 2.7.9 / Spark 1.3.1)를 사용하고 있으며 내림차순으로 필터링 및 정렬해야하는 데이터 프레임 GroupObject가 있습니다. 이 코드 조각을 통해 달성하려고합니다.

group_by_dataframe.count().filter("`count` >= 10").sort('count', ascending=False)

그러나 다음과 같은 오류가 발생합니다.

sort() got an unexpected keyword argument 'ascending'

답변:


165

PySpark 1.3 sort메서드에서는 오름차순 매개 변수를 사용하지 않습니다. desc대신 방법을 사용할 수 있습니다 .

from pyspark.sql.functions import col

(group_by_dataframe
    .count()
    .filter("`count` >= 10")
    .sort(col("count").desc()))

또는 desc기능 :

from pyspark.sql.functions import desc

(group_by_dataframe
    .count()
    .filter("`count` >= 10")
    .sort(desc("count"))

두 방법 모두 Spark> = 1.3 (Spark 2.x 포함)과 함께 사용할 수 있습니다.



22

지금까지 가장 편리한 방법은 다음을 사용하는 것입니다.

df.orderBy(df.column_name.desc())

특별한 수입이 필요하지 않습니다.


에 신용 다니엘 Haviv 나에게이 방법을 보여 Databricks에서 솔루션 설계자.
gdoron 모니카 지원하고

1
여기에 가장 좋은 답변이 있습니다.
born_naked

이것은 대신 받아 들여진 대답이어야합니다. 훨씬 단순하고 패키지에 의존하지 않음 (아마도 당시에는 사용할 수 없었던 것 같습니다)
Anonymous

나는이 답변을 정말 좋아하지만 스파크 3.0.0에서 카운트로 나를 위해 일하지 않았습니다. 카운트는 숫자가 아니라 함수이기 때문이라고 생각합니다. TypeError : 잘못된 인수, 문자열 또는 열이 아닙니다. <class 'method'> 유형의 <bound method DataFrame.count of DataFrame [...]>. 열 리터럴의 경우 'lit', 'array', 'struct'또는 'create_map'함수를 사용하십시오.
Armando

4

pyspark 2.4.4에서

1) group_by_dataframe.count().filter("`count` >= 10").orderBy('count', ascending=False)

2) from pyspark.sql.functions import desc
   group_by_dataframe.count().filter("`count` >= 10").orderBy('count').sort(desc('count'))

1)에서 가져올 필요가 없으며 1) 짧고 읽기 쉬우
므로 1) 2)보다 선호합니다.


3

다음과 같이 groupBy 및 orderBy를 사용할 수도 있습니다.

dataFrameWay = df.groupBy("firstName").count().withColumnRenamed("count","distinct_name").sort(desc("count"))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.