Tôi đang chạy mã của mình trong cụm EMR từ Amazon bằng pyspark. Sau đó, cách tôi đã làm cho nó làm việc được làm theo các bước sau:
1) Đặt hành động bootstrap này trong việc tạo ra cụm (để tạo máy chủ elasticsearch localhost):
s3://awssupportdatasvcs.com/bootstrap-actions/elasticsearch/elasticsearch_install.4.0.0.rb
2) Tôi chạy các lệnh này để cư cơ sở dữ liệu elasticsearch với một số dữ liệu:
curl -XPUT "http://localhost:9200/movies/movie/1" -d' {
"title": "The Godfather",
"director": "Francis Ford Coppola",
"year": 1972
}'
bạn cũng có thể chạy lệnh curl khác nếu bạn muốn, như:
curl -XGET http://localhost:9200/_search?pretty=true&q={'matchAll':{''}}
3) Tôi inited pyspark sử dụng các thông số sau:
pyspark --driver-memory 5G --executor-memory 10G --executor-cores 2 --jars=elasticsearch-hadoop-5.5.1.jar
Tôi đã tải client elasticsearch python trước
4) Tôi chạy đoạn mã sau:
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()
Sau đó, cuối cùng tôi nhận được kết quả thành công từ lệnh.
Đó là những gì tôi đã làm ngay bây giờ, tôi đã hy vọng có một cách để trực tiếp lấy một DataFrame lọc –
Tôi không chắc chắn rằng nó có thể với API mới nhất của kết nối ES-Hadoop Spark. –
Có cách nào để viết một khung dữ liệu để elasticsearch sử dụng API này không? –