elasticsearch-hadoop使用示例


在elasticsearch-hadoop的具體使用中碰到了幾個問題,有必要記錄一下,避免下次遇到時又要重新研究。

利用spark讀取es數據源的簡單示例

import org.elasticsearch.spark.sql._

val esOptions = Map("es.nodes"->"192.168.1.2,192.168.1.3", "es.scroll.size"->"1000", "es.field.read.as.array.include"->"SampleField")

val esDF = sqlContext.read.format("org.elasticsearch.spark.sql").options(esOptions).load("sampleindex/es-spark")

esDF.registerTempTable("esdemotbl")

es.scroll.size 一次性讀入的記錄數,默認是10, 如果不設置為大一點的值,要從es中讀取1億條數據,那將是一個漫長的過程

es.field.read.as.array.include 有的字段在es中是以string類型存儲,但其中包含逗號(,), spark默認認為這是數組類型,如果讀取這種字段的話,就會報錯,怎么辦,那就用es.field.read.as.array.include來顯式指明

spark讀取es中數據的時候,partition數目取決於es中指定index的shard數目,為了獲得比較高的並發讀取性能,建議適當設置shard數目,為什么是適當,因為具體取決於集群規模等多種因素。

字段名的大小寫問題

在hive中,字段名是_大小寫不敏感_的, 但在ES中是大小寫敏感的

你說,這又怎么樣。 呵呵, 這意味着不做特殊處理,永遠無法讀出es中大寫字段名的內容,你看到的將是滿屏的_NULL_

這該怎么破,很簡單,指定 es.mapping.names

比如在es中,字段名為DemoField, 要讀出其中的內容,hive表的字義就該這樣寫

create external table es_demo_tbl(
demofield string) 
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES('es.nodes'='192.168.1.2,192.168.1.3', 'es.resource'='demoindex/sample',
'es.mapping.names'='demofield:DemoField')

注意是先hive中的字段名,然后是es中的字段名


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM