我正在尝试使用apache spark在ElasticSearch中创建索引(向es写入大量数据)。我已经使用apache spark编写了一个scala程序来创建索引。我必须索引大量数据,这些数据在linkedlist中作为我的产品bean获得。然后,我尝试遍历产品bean列表并创建索引。我的代码如下。
val conf = new SparkConf().setAppName("ESIndex").setMaster("local[*]")
conf.set("es.index.auto.create", "true").set("es.nodes", "127.0.0.1")
.set("es.port", "9200")
.set("es.http.timeout", "5m")
.set("es.scroll.size", "100")
val sc = new SparkContext(conf)
//Return my product bean as a in a linkedList.
val list: util.LinkedList[product] = getData()
for (item <- list) {
sc.makeRDD(Seq(item)).saveToEs("my_core/json")
}
这种方法的问题是创建索引花费了太多时间。有没有更好的方法来创建索引?
1条答案
按热度按时间9lowa7mx1#
除非必要,否则不要通过驱动程序传递数据。取决于从
getData
您应该使用相关的输入法或创建自己的输入法。例如,如果数据来自mongodbmongo-hadoop
,Spark-MongoDB
或者使用jdbc连接进行演练。然后使用map
或类似的方法来构建所需的对象并使用saveToEs
在rdd上。用as-single元素创建rdd是没有意义的。它完全没有从spark体系结构中获益。你只需要启动一个潜在的大量任务,这些任务只有一个活动的执行者。