让我们以交通摄像头案例为例。比如说,我有一个巨大的数据集,里面有交通摄像头记录,看起来像:plate_no|camera_id|city|location|direction|timestamp|etc|etc|等等。
我想让结果满足以下所有条件:
- 类似"%George Street"的位置
- 10月1日<时间戳<10月3日
- 10月4日<时间戳<10月5日
- 10月15日<时间戳<10月20日
我们现在采用的方法是在SolrCloud中对数据进行索引,然后得到三个结果集,如1&2、1&3、1&4,然后使用SparkSQL将它们作为RDD加载。最后,使用Spark将三个结果集相交。最后,你得到了10月1-3日、10月4-5日和10月20日出现在乔治街周围的汽车,但性能并不理想,Spark SQL查询Solr和形成RDD需要花费大量时间。我们只测试了大约5亿条记录,这样的查询需要1-2分钟。当我们增加数据集时,情况会变得更糟。我们正在寻找30秒左右的东西。
只是想知道什么是完成这项任务的合适工具,或者有比这更好的方法吗。
最后,我们找到了一个合理的解决方案,我们将我们的配置单元表放在"Parquet+Snappy"格式中,然后,我们只使用SparkSQL针对不同的时间段进行查询,并获取不同的结果集,如1&2、1&3、1&4.最后,我们在结果集上做了一个"交集"。
在这种情况下,我们完全摆脱了索尔。演出最后相当不错。
例如,SparkSQL确实支持Like查询,intersect