Spark DataFrame GroupBy और अवरोही क्रम में क्रमबद्ध करें (pyspark)


90

मैं 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'

जवाबों:


173

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

स्पार्क> = 1.3 (स्पार्क 2.x सहित) के साथ दोनों तरीकों का उपयोग किया जा सकता है।



25

अब तक सबसे सुविधाजनक तरीका इसका उपयोग कर रहा है:

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

विशेष आयात की आवश्यकता नहीं है


1
करने के लिए क्रेडिट डैनियल Haviv Databricks पर एक समाधान वास्तुकार जो मुझे इस तरह से पता चला है।
गेदरॉन

1
अब तक का सबसे अच्छा जवाब यहाँ।
जन्म_नार्क

इसके बदले स्वीकृत उत्तर होना चाहिए। बहुत सिम्पेलेर और नॉट पैकेज पर भरोसा करते हैं (शायद उस समय उपलब्ध नहीं थे)
अनाम

मैं वास्तव में इस जवाब को पसंद करता हूं लेकिन मेरे लिए स्पार्क 3.0.0 में गिनती के साथ काम नहीं किया। मुझे लगता है क्योंकि संख्या के बजाय गिनती एक कार्य है। TypeError: अमान्य तर्क, स्ट्रिंग या कॉलम नहीं: <बाउंड विधि DataFrame.count of DataFrame [...] प्रकार का <क्लास 'विधि'>। कॉलम शाब्दिकों के लिए, 'लिट', 'एरे', 'स्ट्रक्चर' या 'क्रिएट_मैप' फंक्शन का उपयोग करें।
आर्मंडो

5

पीएसपीआरआर 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 से अधिक पसंद है)


4

आप groupBy और orderBy का उपयोग इस प्रकार कर सकते हैं

dataFrameWay = df.groupBy("firstName").count().withColumnRenamed("count","distinct_name").sort(desc("count"))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.