我知道 - 卡桑德拉不支持group by
。但是如何在大量数据上实现类似的结果。
假设我有1百万行clicks
,1毫升shares
和表user_profile
的表格。 clicks
和shares
每行存储一个created_at
列的操作。在仪表板上,我想显示按天分组的结果,例如:
2016-06-01 - 2016-07-01
+-------------+--------+------+
|user_profile | like |share |
+-------------+--------+------+
| John | 34 | 12 |
| Adam | 12 | 4 |
| Bruce | 4 | 2 |
+-------------+--------+------+
问题是,我怎样才能以正确的方式做到这一点:
counter
并将其加入代码中如果你使用代码加入结果,你是否使用Apache Spark SQL,在这种情况下,Spark是否正确?
答案 0 :(得分:1)
假设您的信息中心页面将显示所有历史结果,按日分组:
<强> 1。表格中的“分组依据”:非正规化方法是Cassandra中writes and disk space are cheap可接受的做法。如果您可以构建数据模型(和应用程序写入)来支持这一点,那么这是最好的方法。
<强> 2。 UDA中的“分组依据”:在此blog post中,作者注意到所有行都被拉回协调器,在那里进行协调和聚合(对于CL&gt; 1)。因此,即使您的clicks
和shares
表按日期分区,Cassandra仍然必须将该日期的所有行拉回协调器,将它们存储在JVM堆中然后处理它们。因此,这种方法降低了可扩展性。
第3。合并代码:这将是一个慢得多的方法,因为您必须将更多数据从协调器传输到应用程序服务器。
<强> 4。 Spark:如果您必须进行即席查询(例如分析数据,而不是填充网页),这是一种很好的方法,可以通过笔记本应用程序运行Spark作业来简化(ag {{3 }})。但是,在您的使用案例中,您必须等待该作业完成,将输出写入某处然后将其显示在网页上。