Bir veri çerçevesi sütunun ortalamasını hesaplama ve ilk% 10'u bulma


13

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  

Skalladoku kontrol ettin mi? Ortalama ve maks: için bir örneği vardır .agg(avg(people("salary")), max(people("age"))). Sıralama ile muhtemelen yüzdelik dilimleri ( skipve kullanarak take) bulabilirsiniz , ancak daha hızlı seçenekler olabilir.
Gábor Bakos

Bunu daha önce skalatellerde görmüştüm. Onları aldığım ve hata gibi örnek kullanmaya çalıştığımda not found: value avgvenot found: value max
the3rdNotch

İthalatınız nedir? Bir örnek varsa ve sorunun ne olduğunu açıklarsanız yardım etmek daha kolay olabilir.
Gábor Bakos

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

Aşağıdaki sınama DataFrame işlevlerini kullanmaya başlamanıza yardımcı olabilir. Görünüşe göre siz de ithal etmek zorundasınız org.apache.spark.sql.functions._. (BTW .: Bence ek bilgi soruya daha iyi eklenir ve düzenleme sonrasında bir yorum eklemek yeterlidir.)
Gábor Bakos

Yanıtlar:


21

İhtiyacınız olan içe aktarma ve "RBI'ler" adlı bir sütunun ortalamasını nasıl alacağınız:

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

Standart sapma için bkz. Scala - Spark DataFrame içindeki gruplanmış verilerin standart sapmasını hesaplama - Yığın Taşması

Yüzdeliklere göre gruplama için, kullanıcı tanımlı bir işlev (UDF) aracılığıyla yeni bir sütun tanımlamanızı ve bu sütunda groupBy'yi kullanmanızı öneririm. Görmek


4

Bu aynı zamanda sütun ortalamasını döndürür

df.select (ortalama (df ( "SütunAdı"))). show ()
+ ---------------- +
| ort (SütunAdı) |
+ ---------------- +
| 230,522453845909 |
+ ---------------- +
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.