स्पार्क डेटाफ्रेम df
को देखते हुए, मैं एक निश्चित संख्यात्मक कॉलम 'values'
में अधिकतम मान प्राप्त करना चाहता हूं, और उस मान को प्राप्त करें जहां वह मान प्राप्त हुआ था। मैं निश्चित रूप से यह कर सकते हैं:स्पार्क डेटाफ्रेम में Argmax: अधिकतम मूल्य
# it doesn't matter if I use scala or python,
# since I hope I get this done with DataFrame API
import pyspark.sql.functions as F
max_value = df.select(F.max('values')).collect()[0][0]
df.filter(df.values == max_value).show()
लेकिन यह अक्षम है, क्योंकि यह df
के माध्यम से दो गुजरता की आवश्यकता है।
pandas.Series
/DataFrame
और numpy.array
argmax
/idxmax
तरीकों कि इस कुशलता से करने (एक पास में) है। तो मानक पायथन (अंतर्निहित फ़ंक्शन max
एक प्रमुख पैरामीटर स्वीकार करता है, इसलिए इसका उपयोग उच्चतम मान की अनुक्रमणिका को खोजने के लिए किया जा सकता है)।
स्पार्क में सही दृष्टिकोण क्या है? ध्यान दें कि मुझे कोई फर्क नहीं पड़ता कि मुझे उन सभी पंक्तियां मिलती हैं जहां अधिकतम मूल्य प्राप्त होता है, या उन पंक्तियों के कुछ मनमाने ढंग से (खाली नहीं!) सबसेट।
सामान्य में कोई बेहतर समाधान है जो पार भाषा है और मनमाने ढंग से डेटा पर काम कर सकते हैं। – zero323
@ zero323 डेटाफ्रेम एपीआई में नीचे दिए गए उत्तर में आरडीडी कोड को रैला करना असंभव क्यों है, इसे स्कैला में परिवर्तित करके और उत्प्रेरक के लिए उचित मेटाडेटा जोड़ने के लिए? – max
यह संभव है लेकिन यह स्पष्ट रूप से धारणा को तोड़ देता है कि यदि आप स्कैला या पायथन_ का उपयोग करते हैं तो इससे कोई फर्क नहीं पड़ता कि आप इसे अकेले एसक्यूएल के साथ ऑर्डर करने योग्य डेटा प्रकारों के साथ भी कर सकते हैं लेकिन यह एक विशेष मामला सामान्य समाधान नहीं है। – zero323