Tôi đang cố gắng so sánh các cách khác nhau để tổng hợp dữ liệu của mình.Spark: Cách dịch số (riêng biệt (giá trị)) trong API của Dataframe
Đây là dữ liệu đầu vào của tôi với 2 yếu tố (trang, khách truy cập):
(PAG1,V1)
(PAG1,V1)
(PAG2,V1)
(PAG2,V2)
(PAG2,V1)
(PAG1,V1)
(PAG1,V2)
(PAG1,V1)
(PAG1,V2)
(PAG1,V1)
(PAG2,V2)
(PAG1,V3)
Làm việc với một lệnh SQL vào Spark SQL với mã này:
import sqlContext.implicits._
case class Log(page: String, visitor: String)
val logs = data.map(p => Log(p._1,p._2)).toDF()
logs.registerTempTable("logs")
val sqlResult= sqlContext.sql(
"""select page
,count(distinct visitor) as visitor
from logs
group by page
""")
val result = sqlResult.map(x=>(x(0).toString,x(1).toString))
result.foreach(println)
tôi nhận được kết quả này:
(PAG1,3) // PAG1 has been visited by 3 different visitors
(PAG2,2) // PAG2 has been visited by 2 different visitors
Bây giờ, tôi muốn nhận được kết quả tương tự bằng cách sử dụng Dataframes và API cấp, nhưng tôi không thể nhận được cùng một đầu ra:
import sqlContext.implicits._
case class Log(page: String, visitor: String)
val logs = data.map(p => Coppia(p._1,p._2)).toDF()
val result = log.select("page","visitor").groupBy("page").count().distinct
result.foreach(println)
Trong thực tế, đó là những gì tôi nhận được là đầu ra:
[PAG1,8] // just the simple page count for every page
[PAG2,4]
Đây có thể là một cái gì đó ngu ngốc, nhưng tôi không thể nhìn thấy nó ngay bây giờ.
Cảm ơn trước!
FF
tôi nhận được lỗi này -> không tìm thấy: giá trị countDistinct –
đó là một phương pháp trong 'org.apache.spark.sql .functions', nhập nội dung đó :), chỉnh sửa xong. –
với intelliJ Tôi muốn viết lệnh agg/countDistinct như thế này .agg (org.apache.spark.sql.functions.countDistinct ("khách truy cập")) bởi vì ngay cả khi tôi đã nhập org.apache.spark.sql. chức năng nó vẫn mang lại cho tôi lỗi tương tự ... dù sao nó cũng hiệu quả, nhưng tôi chỉ nhận được cột khách truy cập và không có cột trang ([2], [3]) ... tôi đang thiếu gì? –