डेटाफ्रेम कॉलम के माध्य की गणना कैसे करें और शीर्ष 10% खोजें


13

मैं स्काला और स्पार्क के लिए बहुत नया हूं, और बेसबॉल आंकड़ों का उपयोग करके कुछ स्व-निर्मित अभ्यासों पर काम कर रहा हूं। मैं एक केस क्लास का उपयोग कर रहा हूँ, एक RDD बनाएँ और डेटा को एक स्कीमा असाइन करें, और फिर इसे एक DataFrame में बदल रहा हूँ, इसलिए मैं स्पार्कक्यूडी का उपयोग अपने आँकड़ों के माध्यम से खिलाड़ियों के समूहों का चयन करने के लिए कर सकता हूँ जो कुछ मानदंडों को पूरा करते हैं।

एक बार जब मेरे पास उन खिलाड़ियों का सबसेट होता है जिन्हें मैं आगे देखने में दिलचस्पी रखता हूं, तो मैं एक स्तंभ का मतलब ढूंढना चाहता हूं; जैसे बल्लेबाजी औसत या आरबीआई। वहां से मैं सभी खिलाड़ियों की तुलना में अपने औसत प्रदर्शन के आधार पर सभी खिलाड़ियों को प्रतिशत समूहों में तोड़ना चाहूंगा; शीर्ष 10%, नीचे 10%, 40-50%

मैं हालांकि सभी स्ट्रिंग के रूप में वांछित कॉलम (मतलब, stddev, count, min, और max) का सारांश वापस करने के लिए DataFrame.describe () फ़ंक्शन का उपयोग करने में सक्षम रहा हूं। क्या डबल्स के रूप में सिर्फ माध्य और stddev प्राप्त करने का एक बेहतर तरीका है, और 10-प्रतिशत के समूहों में खिलाड़ियों को तोड़ने का सबसे अच्छा तरीका क्या है?

अब तक मेरे विचार उन मानों को खोजने के लिए हैं जो प्रतिशतक पर्वतमाला को बुक करते हैं और एक फ़ंक्शन लिखते हैं जो खिलाड़ियों को तुलनाकर्ताओं के माध्यम से समूह करता है, लेकिन ऐसा लगता है कि यह पहिया को फिर से स्थापित करने पर सीमा कर रहा है।

मेरे पास वर्तमान में निम्नलिखित आयात हैं:

 import org.apache.spark.rdd.RDD 
 import org.apache.spark.sql.SQLContext 
 import org.apache.spark.{SparkConf, SparkContext} 
 import org.joda.time.format.DateTimeFormat  

क्या आपने स्केलडॉक की जाँच की है ? यह औसत और अधिकतम के लिए एक उदाहरण है .agg(avg(people("salary")), max(people("age"))):। छँटाई के साथ आप शायद प्रतिशत का उपयोग (उपयोग skipऔर take) कर सकते हैं , लेकिन तेज़ विकल्प हो सकते हैं।
गैबोर बकोस

मैंने इसे पहले स्केलडोक में देखा था। जब मैं उन्हें मेरे द्वारा प्राप्त उदाहरण और त्रुटि not found: value avgऔरnot found: value max
the3rdNotch

आपके आयात क्या हैं? यदि कोई उदाहरण है तो मदद करना आसान हो सकता है और आप बता सकते हैं कि समस्या क्या थी।
गैबोर बकोस

import org.apache.spark.rdd.RDD import org.apache.spark.sql.SQLContext import org.apache.spark.{SparkConf, SparkContext} import org.joda.time.format.DateTimeFormat
the3rdNotch

निम्न परीक्षण DataFrame फ़ंक्शन का उपयोग शुरू करने में मदद कर सकता है। ऐसा लगता है कि आपको org.apache.spark.sql.functions._भी आयात करना होगा । (बीटीडब्लू .: मुझे लगता है कि अतिरिक्त जानकारी बेहतर तरीके से सवाल में ही जोड़ दी जाती है और यह संपादित करने के बाद टिप्पणी जोड़ने के लिए पर्याप्त है।)
गैबोर बकोस

जवाबों:


21

यह वह आयात है जिसकी आपको आवश्यकता है, और "RBI" नाम के कॉलम के लिए माध्य कैसे प्राप्त करें:

import org.apache.spark.sql.functions._
df.select(avg($"RBIs")).show()

मानक विचलन के लिए, स्कैला देखें - स्पार्क डेटाफ़्रेम में समूहित डेटा के मानक विचलन की गणना करें - स्टैक बहिर्वाह

प्रतिशत के आधार पर समूहीकरण के लिए, मैं उपयोगकर्ता-परिभाषित फ़ंक्शन (UDF) के माध्यम से एक नया कॉलम परिभाषित करने और उस कॉलम पर GroupBy का उपयोग करने का सुझाव देता हूं। देख


4

यह कॉलम का औसत भी है

df.select (मतलब (df ( "columnName")))। शो ()
+ ---------------- +
| औसत (columnName) |
+ ---------------- +
| २३०.५२२४५३८४५९०९ |
+ ---------------- +
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.