使用Spark 1.6.0和ES 5.0.0-alpha5我试图在Spark中获取一些数据帧。我正在使用包
--packages org.elasticsearch:elasticsearch-spark-13_2.10:5.0.0-alpha5
使用
sqlContext.read.format("org.elasticsearch.spark.sql").option("es.nodes", "my_host").load("logstash-2016.10.10/my_type")
我可以printSchema
查看我的字段。
然而,其中任何一个都会永远挂起,没有例外,似乎没有任务提交给Spark
count, first, etc.
我该如何调试?任何提示都将不胜感激!
编辑: 我在docker容器中运行elasticsearch,我也可以通过Kibana成功连接并直接进行http rest查询。
答案 0 :(得分:4)
就我而言,我在Google Cloud中运行ElasticSearch和Spark实例作为Docker容器。在每个地方阅读和搜索后,我偶然发现了这一点:https://www.elastic.co/guide/en/elasticsearch/hadoop/master/cloud.html。 ES Spark连接器具有一个名为es.nodes.wan.only
的设置,使其在云环境(如Google Cloud或AWS)中运行。我之前遇到了与OP完全相同的问题,例如: printSchema
有效但任何聚合都不起作用,这个确切的设置为我修复了它!
您可以在初始化SparkConfig
时对其进行配置,如下所示:
val conf = new SparkConf()
.setAppName("MySparkModel")
.set("es.nodes.wan.only", "true)
答案 1 :(得分:1)
这个问题已经很老了,但我将描述我过去使用ES 5.0和Spark 2.0进行未来参考的方法。我认为ES-Hadoop文档对于使用什么工件和API有点不清楚。
我使用了org.elasticsearch:elasticsearch-spark-20_2.11:5.0
和以下代码:
// add to your class imports
import org.elasticsearch.spark.sql._
// Use Spark 2.0 SparkSession object to provide your config
val sparkSession = SparkSession.builder().config(...).getOrCreate()
// Optional step, imports things like $"column"
import sparkSession.implicits._
// Specify your index and type in ES
val df = spark.esDF("index/type")
// Perform an action
df.count()
我认为Spark 1.6的情况非常相似,但有一些细微的变化。特别是,您应该使用SQLContext
或HiveContext
代替SparkSession
。