elasticsearch 如何使用Pyspark和Dataframes查询Elasticsearch索引,elasticsearch,dataframe,pyspark,elasticsearch,Dataframe,Pyspark" /> elasticsearch 如何使用Pyspark和Dataframes查询Elasticsearch索引,elasticsearch,dataframe,pyspark,elasticsearch,Dataframe,Pyspark" />

elasticsearch 如何使用Pyspark和Dataframes查询Elasticsearch索引

elasticsearch 如何使用Pyspark和Dataframes查询Elasticsearch索引,elasticsearch,dataframe,pyspark,elasticsearch,Dataframe,Pyspark,Elasticsaerch的文档仅涵盖加载完整的Spark索引 from pyspark.sql import SQLContext sqlContext = SQLContext(sc) df = sqlContext.read.format("org.elasticsearch.spark.sql").load("index/type") df.printSchema() 如何使用pyspark执行查询以从Elasticsearch索引返回数据并将其作为数据帧加载到Spark?下面是我的操

Elasticsaerch的文档仅涵盖加载完整的Spark索引

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.read.format("org.elasticsearch.spark.sql").load("index/type")
df.printSchema()
如何使用pyspark执行查询以从Elasticsearch索引返回数据并将其作为数据帧加载到Spark?

下面是我的操作方法

常规环境设置和命令:

export SPARK_HOME=/home/ezerkar/spark-1.6.0-bin-hadoop2.6
export PYSPARK_DRIVER_PYTHON=ipython2

./spark-1.6.0-bin-hadoop2.6/bin/pyspark --driver-class-path=/home/eyald/spark-1.6.0-bin-hadoop2.6/lib/elasticsearch-hadoop-2.3.1.jar
代码:

还可以定义数据框列。有关更多信息,请参阅


希望能有帮助

我使用pyspark在Amazon的EMR集群中运行代码。然后,我的工作方式是遵循以下步骤:

1) 将此引导操作放入群集创建中(以创建localhost elasticsearch服务器):

2) 我运行以下命令以使用一些数据填充elasticsearch数据库:

 curl -XPUT "http://localhost:9200/movies/movie/1" -d' {
   "title": "The Godfather",
   "director": "Francis Ford Coppola",
   "year": 1972
  }'
如果愿意,还可以运行其他curl命令,如:

curl -XGET http://localhost:9200/_search?pretty=true&q={'matchAll':{''}}
3) 我使用以下参数初始化pyspark:

pyspark --driver-memory 5G --executor-memory 10G --executor-cores 2 --jars=elasticsearch-hadoop-5.5.1.jar
我以前下载过elasticsearch python客户端

4) 我运行以下代码:

from pyspark import SparkConf
from pyspark.sql import SQLContext

q ="""{
  "query": {
    "match_all": {}
  }  
}"""

es_read_conf = {
    "es.nodes" : "localhost",
    "es.port" : "9200",
    "es.resource" : "movies/movie",
    "es.query" : q
}

es_rdd = sc.newAPIHadoopRDD(
    inputFormatClass="org.elasticsearch.hadoop.mr.EsInputFormat",
    keyClass="org.apache.hadoop.io.NullWritable", 
    valueClass="org.elasticsearch.hadoop.mr.LinkedMapWritable", 
    conf=es_read_conf)

sqlContext.createDataFrame(es_rdd).collect()

然后,我终于从命令中获得了成功的结果。

我遇到了一个类似的问题,即如何将地理过滤数据获取到PySpark数据帧中。我在spark版本2.1.1和ES版本5.2中使用elasticsearch-spark-20_2.11-5.2.2.jar。通过在创建数据帧时将查询指定为选项,我可以将数据加载到数据帧中

spark_df = spark.read.format("es").option("es.query", q).load("index_name")
我的地理查询

q ="""{
  "query": {
        "bool" : {
            "must" : {
                "match_all" : {}
            },
           "filter" : {
                "geo_distance" : {
                    "distance" : "100km",
                    "location" : {
                        "lat" : 35.825,
                        "lon" : -87.99
                    }
                }
            }
        }
    }
}"""
我使用以下命令将数据加载到DataFrame中

spark_df = spark.read.format("es").option("es.query", q).load("index_name")

这就是我现在正在做的,我希望有一种方法可以直接获取过滤后的数据帧我不确定ES Hadoop Spark connector的最新API是否可行。是否有一种方法可以使用此API将数据帧写入elasticsearch?
spark_df = spark.read.format("es").option("es.query", q).load("index_name")