Uruchomiłem mój kod w klastrze EMR z Amazon za pomocą pyspark. Następnie droga zrobiłem to prace następujące kroki:
1) Umieść tę akcję bootstrap w tworzeniu klastrów (w celu utworzenia localhost serwer elasticsearch):
s3://awssupportdatasvcs.com/bootstrap-actions/elasticsearch/elasticsearch_install.4.0.0.rb
2) i uruchomić te polecenia do wypełnienia baza elasticsearch z niektórych danych:
curl -XPUT "http://localhost:9200/movies/movie/1" -d' {
"title": "The Godfather",
"director": "Francis Ford Coppola",
"year": 1972
}'
można również uruchomić inne polecenia curl jeśli chcesz, jak:
curl -XGET http://localhost:9200/_search?pretty=true&q={'matchAll':{''}}
3) I inited pyspark stosując następujące parametry:
pyspark --driver-memory 5G --executor-memory 10G --executor-cores 2 --jars=elasticsearch-hadoop-5.5.1.jar
ja ściągnąłem klienta elasticsearch Pythona wcześniej
4) uruchomić następujący kod:
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()
Potem wreszcie pomyślny wynik z polecenia.
Właśnie to robiłem teraz, miałem nadzieję, że istnieje sposób na bezpośrednie pobranie przefiltrowanej DataFrame –
Nie jestem pewien, czy jest to możliwe z najnowszym API złącza ES-Hadoop Spark. –
Czy istnieje sposób na zapisanie ramek danych w elastycznym wyglądzie również przy użyciu tego interfejsu API? –