This guy有一个非常小的例子,展示了当所有ES生态系统都是0.9版本时,如何集成ElasticSearch和Spark。如今,它不再起作用了(谷歌搜索它似乎并不容易)。有人可以给出一个小的,独立的Scala示例:
/var/log/syslog
); ...适用于ElasticSearch 1.3.4和Spark 1.1.0。
答案 0 :(得分:3)
我用Spark和Elastic Search回顾了一段时间(大约0.9天),最近我更新了一些当前的例子(见1.1)。我已发布slides和example code。希望有所帮助!
我还在这里复制了相关部分(来自我自己的github repo):
import org.elasticsearch.spark.sql._
...
val tweetsAsCS =
createSchemaRDD(tweetRDD.map(SharedIndex.prepareTweetsCaseClass))
tweetsAsCS.saveToEs(esResource)
请注意,我们没有指定任何ES节点。这将默认尝试保存到本地主机上的群集。如果我们想要使用不同的集群,我们可以添加:
// if we want to have a different es cluster we can add
import org.elasticsearch.hadoop.cfg.ConfigurationOptions
val config = new SparkConf()
config.set(ConfigurationOptions.ES_NODES, node) // set the node for discovery
// other config settings
val sc = new SparkContext(config)
这样就可以完成第一部分(索引一些数据)。
从Spark查询ES也变得更加简单了,尽管只有连接器的映射支持您的数据类型(我遇到的主要问题不是地理定位但是它很容易扩展映射器,如果你遇到这个)。
val query = "{\"query\": {\"filtered\" : {\"query\" : {\"match_all\" : {}},\"filter\" : { \"geo_distance\" : { \"distance\" : \""+ dist + "km\", \"location\" : { \"lat\" : "+ lat +", \"lon\" : "+ lon +" }}}}}}"
val tweets = sqlCtx.esRDD(esResource, query)
esRDD函数通常不在SQLContext上,但我们上面导入的隐式转换使我们可以使用它。 tweets现在是一个SchemaRDD,我们可以根据需要更新它,并像我们在本例的第一部分那样保存结果。
希望这有帮助!