elasticsearch hadoop使用示例

2022-07-05 06:06:13 字數 1219 閱讀 5277

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

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中,欄位名為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',

注意是先hive中的欄位名,然後是es中的欄位名

ConcurrentHashMap使用示例

concurrenthashmap是併發效率更高的map,用來替換其他執行緒安全的map容器,比如hashtable和collections.synchronizedmap。實際上,併發執行時,執行緒安全的容器只能保證自身的資料不被破壞,但無法保證業務的行為是否正確。錯誤的理解這裡的執行緒安全,不恰...

boost share ptr智慧型指標使用示例

12 3456 78910 1112 1314 1516 1718 1920 2122 2324 2526 2728 2930 3132 3334 3536 3738 3940 4142 4344 4546 4748 4950 5152 5354 5556 5758 5960 6162 6364 6...

sqlalchemy 的 Core 方式使用示例

知乎 sqlalchemy 的 core 方式運算元據是一種怎樣的體驗?答 爽!基本步驟如下 from sqlalchemy import create engine engine create engine sqlite memory echo true conn engine.connect f...