Scala ve Spark için çok yeniyim ve beyzbol istatistiklerini kullanarak kendi kendine yapılan bazı egzersizler üzerinde çalışıyorum. Ben bir case sınıf bir RDD oluşturmak ve verilere bir şema atamak kullanıyorum ve daha sonra belirli kriterleri karşılayan istatistikleri üzerinden oyuncu grupları seçmek için SparkSQL kullanabilirsiniz böylece bir DataFrame dönüm.
Daha fazla bakmak istediğim oyuncuların alt kümesine sahip olduğumda, bir sütunun ortalamasını bulmak istiyorum; Vuruş Ortalaması veya RBI'ler. Oradan tüm oyuncuları ortalama performanslarına göre tüm oyunculara göre yüzdelik gruplara ayırmak istiyorum; üst% 10, alt% 10,% 40-50
DataFrame.describe () işlevini, tüm dizeleri olarak istenen bir sütunun (ortalama, stddev, count, min ve max) bir özetini döndürmek için kullanabildim. Doubles olarak sadece ortalama ve stddev'i almanın daha iyi bir yolu var mı ve oyuncuları yüzde 10'luk gruplara ayırmanın en iyi yolu nedir?
Şimdiye kadar düşüncelerim, yüzdelik aralıkları ayıran değerleri bulmak ve oyuncuları karşılaştırıcılar aracılığıyla gruplandıran bir işlev yazmak, ancak bu, tekerleği yeniden icat etmekle sınırlanıyor gibi geliyor.
Şu anda aşağıdaki ithalat var:
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
venot 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 .: Bence ek bilgi soruya daha iyi eklenir ve düzenleme sonrasında bir yorum eklemek yeterlidir.)
.agg(avg(people("salary")), max(people("age")))
. Sıralama ile muhtemelen yüzdelik dilimleri (skip
ve kullanaraktake
) bulabilirsiniz , ancak daha hızlı seçenekler olabilir.