मैं स्पार्क डेटाफ़्रेम कॉलम में सबसे बड़ा मूल्य प्राप्त करने का सबसे अच्छा तरीका जानने का प्रयास कर रहा हूं।स्पार्क डेटाफ्रेम कॉलम में अधिकतम मान प्राप्त करने का सबसे अच्छा तरीका
df = spark.createDataFrame([(1., 4.), (2., 5.), (3., 6.)], ["A", "B"])
df.show()
कौन बनाता है::
+---+---+
| A| B|
+---+---+
|1.0|4.0|
|2.0|5.0|
|3.0|6.0|
+---+---+
मेरा लक्ष्य स्तंभ एक में सबसे बड़ा मान को मिल रहा है (निरीक्षण से, इस 3.0 है)
निम्न उदाहरण पर विचार करें।
# Method 1: Use describe()
float(df.describe("A").filter("summary = 'max'").select("A").collect()[0].asDict()['A'])
# Method 2: Use SQL
df.registerTempTable("df_table")
spark.sql("SELECT MAX(A) as maxval FROM df_table").collect()[0].asDict()['maxval']
# Method 3: Use groupby()
df.groupby().max('A').collect()[0].asDict()['max(A)']
# Method 4: Convert to RDD
df.select("A").rdd.max()[0]
ऊपर से प्रत्येक सही जवाब देता है, लेकिन एक स्पार्क रूपरेखा उपकरण के अभाव में मैं नहीं बता सकता है जो सबसे अच्छा है: PySpark की सहायता से देखें चार दृष्टिकोण मैं के बारे में सोच सकते हैं।
स्पार्क रनटाइम या संसाधन उपयोग के संदर्भ में उपर्युक्त तरीकों पर अंतर्ज्ञान या अनुभववाद से कोई भी विचार सबसे ऊपर है या क्या ऊपर दिए गए लोगों की तुलना में अधिक प्रत्यक्ष विधि है या नहीं?
तरीके 2 और 3 बराबर हैं और समान भौतिक और अनुकूलित लॉजिकल योजनाओं का उपयोग करते हैं। विधि 4 Rdd पर अधिकतम के साथ कम लागू होता है। यह डेटाफ्रेम पर सीधे संचालन करने से धीमा हो सकता है। विधि 1 2 और 3 के बराबर कम है। – zero323
@ zero323 'df.select (अधिकतम (" ए ")) के बारे में क्या है।() [0] .asDict() ['max (ए)']'? विधि 2 के बराबर दिखता है जबकि अधिक कॉम्पैक्ट, और विधि 3 के बारे में भी अधिक सहज ज्ञान युक्त लगता है। – desertnaut
- सबसे धीमा तरीका विधि 4 है, क्योंकि आप पूरे कॉलम के आरडीडी रूपांतरण में डीएफ करते हैं और फिर अधिकतम मूल्य निकालते हैं; –