Tôi có nhật ký người dùng mà tôi đã lấy từ csv và được chuyển đổi thành DataFrame để tận dụng các tính năng truy vấn SparkSQL. Một người dùng sẽ tạo nhiều mục nhập mỗi giờ và tôi muốn thu thập một số thông tin thống kê cơ bản cho mỗi người dùng; thực sự chỉ là số lượng các trường hợp người dùng, mức trung bình và độ lệch chuẩn của nhiều cột. Tôi đã có thể nhanh chóng có được giá trị trung bình và đếm thông tin bằng cách sử dụng groupby ($ "user") và aggregator với các chức năng SparkSQL cho đếm và trung bình:Tính toán độ lệch chuẩn của dữ liệu được nhóm trong Spark DataFrame
val meanData = selectedData.groupBy($"user").agg(count($"logOn"),
avg($"transaction"), avg($"submit"), avg($"submitsPerHour"), avg($"replies"),
avg($"repliesPerHour"), avg($"duration"))
Tuy nhiên, tôi dường như không thể tìm thấy một cách bình đẳng thanh lịch để tính toán độ lệch chuẩn. Cho đến nay tôi chỉ có thể tính toán nó bằng cách ánh xạ một chuỗi, cặp đôi và sử dụng StatCounter() tiện ích độ lệch chuẩn:.
val stdevduration = duration.groupByKey().mapValues(value =>
org.apache.spark.util.StatCounter(value).stdev)
này trả về một RDD tuy nhiên, và tôi muốn thử và giữ cho nó tất cả trong một DataFrame cho các truy vấn khác có thể thực hiện được trên dữ liệu trả về.
trình Perfect! Cảm ơn bạn rất nhiều vì câu trả lời tuyệt vời và để thêm vào lời gọi hàm bí danh. – the3rdNotch
typo siêu nhỏ: stdev -> stddev – Jesse
Có ba hàm trong hàm SparkSQL: stddev, stddev_samp, stddev_pop. Vậy có cần phải thực hiện tùy chỉnh nữa không? –