Cách tính giá trị trung bình của cột dataframe và tìm 10% hàng đầu


13

Tôi rất mới với Scala và Spark, và đang thực hiện một số bài tập tự tạo bằng cách sử dụng số liệu thống kê bóng chày. Tôi đang sử dụng lớp trường hợp tạo RDD và gán lược đồ cho dữ liệu và sau đó biến nó thành DataFrame để tôi có thể sử dụng SparkQuery để chọn các nhóm người chơi thông qua các số liệu thống kê đáp ứng các tiêu chí nhất định.

Khi tôi có tập hợp các cầu thủ mà tôi quan tâm để tìm hiểu thêm, tôi muốn tìm giá trị trung bình của một cột; ví dụ: Batted Average hoặc RBIs. Từ đó tôi muốn chia tất cả người chơi thành các nhóm phần trăm dựa trên hiệu suất trung bình của họ so với tất cả người chơi; 10% hàng đầu, 10% dưới cùng, 40-50%

Tôi đã có thể sử dụng hàm DataFrame.describe () để trả về một bản tóm tắt của một cột mong muốn (trung bình, stddev, đếm, tối thiểu và tối đa) dưới dạng các chuỗi. Có cách nào tốt hơn để lấy chỉ số trung bình và stddev là Nhân đôi, và cách tốt nhất để chia người chơi thành các nhóm 10 phần trăm là gì?

Cho đến nay, suy nghĩ của tôi là tìm ra các giá trị vượt qua phạm vi phần trăm và viết một hàm phân nhóm người chơi thông qua các bộ so sánh, nhưng cảm giác như nó đang giáp với việc phát minh lại bánh xe.

Tôi có nhập khẩu sau đây:

 import org.apache.spark.rdd.RDD 
 import org.apache.spark.sql.SQLContext 
 import org.apache.spark.{SparkConf, SparkContext} 
 import org.joda.time.format.DateTimeFormat  

Bạn đã kiểm tra scaladoc chưa? Nó có một ví dụ cho trung bình và tối đa : .agg(avg(people("salary")), max(people("age"))). Với việc sắp xếp, bạn có thể tìm thấy (sử dụng skiptake) phần trăm, nhưng có thể có các tùy chọn nhanh hơn.
Gábor Bakos

Tôi đã thấy điều này trước đây trong scaladocs. Khi tôi cố gắng sử dụng chúng như ví dụ tôi nhận được và lỗi not found: value avgnot found: value max
the3rdNotch

Nhập khẩu của bạn là gì? Có thể dễ dàng hơn để giúp đỡ nếu có một ví dụ và bạn mô tả vấn đề là gì.
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

Thử nghiệm sau đây có thể giúp bắt đầu sử dụng các hàm DataFrame. Có vẻ như bạn phải nhập org.apache.spark.sql.functions._quá. (BTW.: Tôi nghĩ rằng thông tin bổ sung được thêm vào câu hỏi tốt hơn và nó là đủ để thêm nhận xét sau khi chỉnh sửa.)
Gábor Bakos

Câu trả lời:


21

Đây là mục nhập bạn cần và cách lấy giá trị trung bình của một cột có tên "RBIs":

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

Để biết độ lệch chuẩn, xem scala - Tính độ lệch chuẩn của dữ liệu được nhóm trong Spark DataFrame - Stack Overflow

Để nhóm theo phần trăm, tôi khuyên bạn nên xác định một cột mới thông qua hàm do người dùng xác định (UDF) và sử dụng groupBy trên cột đó. Xem


4

Đây cũng là trả về trung bình của cột

df.select (có nghĩa là (df ("Cột Tên"))). show ()
+ ---------------- +
| avg (Cột Tên) |
+ ---------------- +
| 230.522453845909 |
+ ---------------- +
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.