কিভাবে একটি ডেটা ফ্রেম কলামের গড় গণনা করতে এবং শীর্ষ 10% সন্ধান করতে


13

আমি স্কালা এবং স্পার্কে খুব নতুন, এবং বেসবলের পরিসংখ্যান ব্যবহার করে কিছু স্ব-তৈরি মহড়া নিয়ে কাজ করছি। আমি কেস ক্লাসটি একটি আরডিডি তৈরি করে ডেটাতে একটি স্কিমা বরাদ্দ করছি এবং এরপরে এটি একটি ডেটা ফ্রেমে রূপান্তর করছি যাতে আমি নির্দিষ্ট মানদণ্ডের সাথে মেলে এমন স্টাটগুলির মাধ্যমে খেলোয়াড়দের গ্রুপ নির্বাচন করতে স্পার্কএসকিউএল ব্যবহার করতে পারি।

আমি যখন আরও খেলোয়াড়দের সাবসেটটি পেয়েছি তখন আমি আরও দেখার আগ্রহী, আমি একটি কলামের গড়টি খুঁজে পেতে চাই; যেমন ব্যাটিং গড় বা আরবিআই। সেখান থেকে আমি সমস্ত খেলোয়াড়কে সব খেলোয়াড়ের তুলনায় তাদের গড় পারফরম্যান্সের ভিত্তিতে পারসেন্টাইল গ্রুপে বিভক্ত করতে চাই; শীর্ষ 10%, নীচে 10%, 40-50%

যদিও আমি পছন্দসই কলামের একটি সংক্ষিপ্তসার (অর্থাত্ 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

নিম্নলিখিত পরীক্ষাটি ডেটাফ্রেম ফাংশনগুলি ব্যবহার শুরু করতে সহায়তা করতে পারে। দেখে মনে হচ্ছে আপনাকেও আমদানি করতে org.apache.spark.sql.functions._হবে। (বিটিডব্লিউ .: আমি মনে করি অতিরিক্ত তথ্যটি নিজেই প্রশ্নটিতে আরও যুক্ত হয়েছে এবং সম্পাদনার পরে কোনও মন্তব্য যোগ করা যথেষ্ট))
গ্যাবার বাকোস

উত্তর:


21

এটি আপনার প্রয়োজনীয় আমদানি এবং "আরবিআই" নামে একটি কলামের অর্থ কীভাবে পাবেন:

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

স্ট্যানডার্ড ডেভিয়েশন জন্য, দেখুন স্ট্যাক ওভারফ্লো - স্কেল - হিসাব একটি স্পার্ক DataFrame গোষ্ঠীবদ্ধ ডেটার স্ট্যানডার্ড ডেভিয়েশন

পারসেন্টাইল দ্বারা গোষ্ঠীভুক্ত করার জন্য, আমি একটি ব্যবহারকারী-সংজ্ঞায়িত ফাংশন (ইউডিএফ) এর মাধ্যমে একটি নতুন কলাম সংজ্ঞায়িত করার এবং সেই কলামে গ্রুপবি ব্যবহার করার পরামর্শ দিচ্ছি। দেখা


4

এটি কলামের গড়ও দেয়

df.select (গড় (df প্রয়োগ ( "columnname")))। প্রদর্শনী ()
+ + ---------------- + +
| গড় (columnname) |
+ + ---------------- + +
| 230,522453845909 |
+ + ---------------- + +
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.