我正在使用Spark-Sql查询Cassandra表。 在Cassandra中,我使用时间段和一个ID对数据进行了分区,因此基于查询,我需要使用spark-sql合并多个分区,并根据union-result进行聚合/分组,如下所示:
for(all cassandra partitions){
DataSet<Row> currentPartition = sqlContext.sql(....);
unionResult = unionResult.union(currentPartition);
}
增加输入(已加载分区的数量)会比线性增加更多的响应时间,因为并集将按顺序进行。
因为并行执行并集没有害处,而且我不知道如何强制火花并行执行它们,所以现在我正在使用ThreadPool 异步加载我的应用程序中的所有分区(这可能会导致OOM),并以某种方式在Java中进行排序或简单分组(这让我想到了为什么我甚至都使用spark?)
简短的问题是: 如何在执行合并时强制spark-sql并行加载cassandra分区? 同样,我也不想过多地执行任务,在我的“异步异步”解决方案中,我使用Coalesece(1),所以一个任务是如此之快(仅在casandra上等待时间)。