spark rdd

时间:2019-04-29 06:05:32

标签: apache-spark elasticsearch

在某些情况下,我需要获取Elasticsearch文档计数。这是我下面考虑的代码。

// way 1
conditionsCountRDD = conditionRDD.map( condition=> /* ES count query with condition */)

// way 2
ESDataDF = /* get es data as DF */
conditionsCountRDD = conditionRDD.map( condition=> /* DF.filter with condition */)

哪种方法更适合获取“ conditionCountRDD”?

1 个答案:

答案 0 :(得分:0)

我假设您知道如何从ES查询文档并将其导入SparkContext。

如果您认为Elasticsearch集群和Spark Cluster都具有或多或少相似的集群配置,我想认为允许Elasticsearch查询并为您提供结果是有效的。

对于像文档数量这样简单的基本搜索查询,除非计划运行某些其他迭代算法/计算,否则将所有文档都存储在Spark中并在那里执行计算是没有意义的。

当涉及Elasticsearch的{​​{3}}时,它也使用map reduce的概念。

如果您尝试在SparkContext中从Elasticsearch中获取较大的文档,然后使用Spark代码执行度量标准聚合,则将有大量的IO,Elasticsearch不必这样做,但是同样,您需要验证并查看合适的文档最好。

您可能还想知道Spark计算专门用于计算基于指标的聚合/计数所需的费用;预留了进行IO操作的时间(我敢肯定,这要比RDD概念的ES计算速度快得多,因为RDD概念中的所有数据都可以立即存储在内存中以执行计算)。

话虽如此,您没有提到/指定Elasticsearch集群以及Spark集群的硬件配置。也许您可能还需要采用启发式方法,看看两种方式都做时是否发现计算上有任何显着差异。

请记住,Elasticsearch是水平扩展的,这意味着它具有执行某些类型的分布式计算的能力,并且如果它可以执行某些操作,为什么还要重做并在其他地方执行。

希望有帮助!