我希望我理解正確你。這是一個完整的例子。
case class Data(date: String, uid: String, site: String, success: Int)
val sampleData = List(
Data("2014-07-14","userA","google",1),
Data("2014-07-14","userA","google",1),
Data("2014-07-14","userB","google",1),
Data("2014-07-14","userC","yahoo",1),
Data("2014-07-14","userD","facebook",1)
)
sampleData.groupBy(_.date).map
{case (date, datelist) => (date, datelist.groupBy(_.site).map
{case (site, sitelist) => (site, sitelist.groupBy(_.uid).size)})}
輸出是:Map(2014-07-14 -> Map(google -> 2, yahoo -> 1, facebook -> 1))
基本上你得到每個日期,包含的訪問,從不同用戶的站點地圖。請注意,從2計數userA
訪問爲1
sitelist.groupBy(_.uid).size
計數不同訪問由uid
。
編輯是的,沒有額外的數據結構是可能的。你現在只需要處理數組的索引。
val fileText = """2014-07-14,userA,google,1
2014-07-14,userA,google,1
2014-07-14,userA,google,1
2014-07-14,userB,google,1
2014-07-14,userC,yahoo,1
2014-07-14,userD,facebook,1""".stripMargin
fileText.lines.map(_.split(",")).toList.groupBy(_(0)).map
{case (date, datelist) => (date, datelist.groupBy(_(2)).map
{case (site, sitelist) => (site, sitelist.groupBy(_(1)).size)})}
1.你有多大的INP數據? 2.你以後需要在不同的日期統計不同的用戶嗎? –
每天大約有一百萬行,是的將需要統計不同日期的不同用戶。謝謝! – user2727704