【发布时间】:2015-12-12 21:06:51
【问题描述】:
使用 HTTP POST,以下脚本可以插入新字段 createtime 或更新 lastupdatetime:
curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
"doc": {
"lastupdatetime": "2015-09-16T18:00:00"
}
"upsert" : {
"createtime": "2015-09-16T18:00:00"
"lastupdatetime": "2015-09-16T18:00",
}
}'
但在 spark 脚本中,设置 "es.write.operation": "upsert" 后,我根本不知道如何插入 createtime。 official document中只有es.update.script.*...那么,谁能举个例子?
更新:在我的例子中,我想将android设备的信息从log保存为one elasticsearch类型,并将其首次出现时间设置为createtime。如果设备再次出现,我只更新lastupdatetime,但保持createtime 不变。
所以文档id是android ID,如果id存在,更新lastupdatetime,否则插入createtime和lastupdatetime。所以这里的设置是(在python中):
conf = {
"es.resource.write": "stats-device/activation",
"es.nodes": "NODE1:9200",
"es.write.operation": "upsert",
"es.mapping.id": "id"
# ???
}
rdd.saveAsNewAPIHadoopFile(
path='-',
outputFormatClass="org.elasticsearch.hadoop.mr.EsOutputFormat",
keyClass="org.apache.hadoop.io.NullWritable",
valueClass="org.elasticsearch.hadoop.mr.LinkedMapWritable",
conf=conf
)
如果id 不存在,我只是不知道如何插入新 字段。
【问题讨论】:
标签: hadoop elasticsearch apache-spark pyspark