Sto eseguendo il mio codice in un cluster EMR da Amazon utilizzando pyspark. Quindi, il modo in cui l'ho fatta io lavoro è stato la seguente procedura:
1) Inserisci questa azione bootstrap nella creazione di cluster (per creare server di elasticsearch localhost):
s3://awssupportdatasvcs.com/bootstrap-actions/elasticsearch/elasticsearch_install.4.0.0.rb
2) ho eseguito questi comandi per popolare il database elasticsearch con alcuni dati:
curl -XPUT "http://localhost:9200/movies/movie/1" -d' {
"title": "The Godfather",
"director": "Francis Ford Coppola",
"year": 1972
}'
È inoltre possibile eseguire altri comandi ricciolo se lo si desidera, come:
curl -XGET http://localhost:9200/_search?pretty=true&q={'matchAll':{''}}
3) I Inited pyspark utilizzando i seguenti parametri:
pyspark --driver-memory 5G --executor-memory 10G --executor-cores 2 --jars=elasticsearch-hadoop-5.5.1.jar
avevo scaricato il client elasticsearch pitone precedentemente
4) ho eseguito il seguente codice:
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()
Poi finalmente ho potuto risultato positivo dal comando.
Questo è quello che sto facendo in questo momento, speravo che ci fosse un modo per recuperare direttamente un DataFrame filtrato –
Non sono sicuro che sia possibile con l'ultima API del connettore ES-Hadoop Spark. –
C'è un modo per scrivere un dataframe su elasticsearch usando anche questa API? –