ฉันยังใหม่ต่อสกาล่าและสปาร์คและกำลังออกกำลังกายด้วยตัวเองโดยใช้สถิติเบสบอล ฉันใช้คลาสเคสสร้าง RDD และกำหนดสกีมาให้กับข้อมูลจากนั้นเปลี่ยนเป็น DataFrame เพื่อให้ฉันสามารถใช้ SparkSQL เพื่อเลือกกลุ่มผู้เล่นผ่านสถิติที่ตรงกับเกณฑ์ที่กำหนด
เมื่อฉันมีกลุ่มย่อยของผู้เล่นที่ฉันสนใจที่จะดูเพิ่มเติมฉันต้องการค้นหาค่าเฉลี่ยของคอลัมน์ เช่น Batting Average หรือ RBIs จากที่นั่นฉันต้องการแบ่งผู้เล่นทั้งหมดออกเป็นกลุ่มเปอร์เซ็นไทล์ตามประสิทธิภาพโดยเฉลี่ยเมื่อเทียบกับผู้เล่นทุกคน 10% สูงสุด 10% ด้านล่าง 40-50%
ฉันสามารถใช้ฟังก์ชัน DataFrame.describe () เพื่อส่งกลับข้อมูลสรุปของคอลัมน์ที่ต้องการ (mean, stddev, count, min และ max) ทั้งหมดเป็นสตริงได้ มีวิธีที่ดีกว่าในการรับค่าเฉลี่ยและ stddev ในฐานะ Doubles และวิธีที่ดีที่สุดในการแบ่งผู้เล่นออกเป็นกลุ่ม 10 เปอร์เซ็นต์คืออะไร
จนถึงความคิดของฉันคือการหาค่าที่ bookend ช่วงเปอร์เซ็นต์และเขียนฟังก์ชั่นที่ผู้เล่นกลุ่มผ่านการเปรียบเทียบ แต่ที่รู้สึกเหมือนมันล้อมรอบในการคิดค้นล้อ
ฉันมีการนำเข้าต่อไปนี้ในขณะนี้:
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}
import org.joda.time.format.DateTimeFormat
not found: value avg
และnot found: value max
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}
import org.joda.time.format.DateTimeFormat
org.apache.spark.sql.functions._
ด้วย (BTW: ฉันคิดว่าข้อมูลเพิ่มเติมจะถูกเพิ่มเข้าไปในคำถามนั้นดีกว่าและมันก็เพียงพอที่จะเพิ่มความคิดเห็นหลังจากแก้ไข)
.agg(avg(people("salary")), max(people("age")))
มันมีตัวอย่างสำหรับเฉลี่ยและสูงสุดคือ: ด้วยการเรียงลำดับคุณอาจพบ (ใช้skip
และtake
) เปอร์เซ็นไทล์ แต่อาจมีตัวเลือกที่เร็วกว่า