데이터 프레임 열의 평균을 계산하고 상위 10 %를 찾는 방법


13

저는 스칼라와 스파크를 처음 접했고 야구 통계를 사용하여 자체 제작 한 운동을하고 있습니다. 사례 클래스를 사용하여 RDD를 만들고 데이터에 스키마를 할당 한 다음이를 DataFrame으로 전환하여 SparkSQL을 사용하여 특정 기준에 맞는 통계를 통해 선수 그룹을 선택할 수 있습니다.

더 자세히보고 싶은 플레이어의 하위 집합이 있으면 열의 평균을 찾고 싶습니다. 예를 들어 타격 평균 또는 RBI. 거기에서 나는 모든 플레이어와 비교 한 평균 성능을 기준으로 모든 플레이어를 백분위 수 그룹으로 나누고 싶습니다. 상위 10 %, 하위 10 %, 40-50 %

DataFrame.describe () 함수를 사용하여 원하는 열 (평균, stddev, count, min 및 max)의 요약을 모두 문자열로 반환 할 수있었습니다. 평균과 표준을 Doubles로 얻는 더 좋은 방법이 있습니까? 그리고 플레이어를 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  

scaladoc 을 확인 했습니까 ? average 및 max에 대한 예가 .agg(avg(people("salary")), max(people("age")))있습니다. 정렬을 사용 하면 백분위 수 를 찾고 (사용 skip하고 take) 사용할 수 있지만 더 빠른 옵션이있을 수 있습니다.
Gábor Bakos

나는 이전에 scaladocs에서 이것을 보았습니다. 나는 내가받을 예 및 오류처럼 사용하려고하면 not found: value avgnot found: value max
the3rdNotch

수입품은 무엇입니까? 예가 있고 문제가 무엇인지 설명하면 도움이 될 수 있습니다.
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

다음 테스트 는 DataFrame 함수 사용을 시작하는 데 도움이 될 수 있습니다. 당신도 수입해야 할 것 같습니다 org.apache.spark.sql.functions._. (BTW .: 추가 정보가 질문 자체에 더 잘 추가되고 편집 후에 주석을 추가하기에 충분하다고 생각합니다.)
Gábor Bakos

답변:


21

이것은 필요한 가져 오기이며 "RBIs"라는 열의 평균을 얻는 방법입니다.

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

표준 편차는 scala-Spark DataFrame에서 그룹화 된 데이터의 표준 편차 계산-스택 오버플로를 참조하십시오.

백분위 수로 그룹화하려면 사용자 정의 함수 (UDF)를 통해 새 열을 정의하고 해당 열에서 groupBy를 사용하는 것이 좋습니다. 보다


4

이것은 또한 열의 평균을 반환합니다

df.select (mean (df ( "ColumnName"))). show ()
+ ---------------- +
| 평균 (열 이름) |
+ ---------------- +
| 230.522453845909 |
+ ---------------- +
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.