iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
1
Elastic Stack on Cloud

Elastic 30天自我修行系列 第 6

使用 R 上傳 data.frame 至 Elastic Cloud

先來試試 iris 資料上傳至 elastic cloud,且新接新增 Index 名為 iris_0906

library("elastic")

x <- connect(
  host = "abc123.asia-east1.gcp.elastic-cloud.com",
  path = "",
  user = "elastic",
  pwd = "abc123",
  port = 9243,
  transport_schema = "https"
)

docs_bulk(x , iris, "iris_0906")

很快的 150 筆的資料就會上傳成功。
我們可以在 Index Management 進行檢查,的確可以看到Docs count : 150 的字樣。

docs_bulk 這個函數有很多的參數,其中有個參數叫做 chunk_size 。意思是當你的資料筆數很多時,可以拆開來批次上傳。那就讓我們來小試一下,如果有300萬筆時的狀況吧。這300萬筆資料,如果匯出為 CSV 的話,大約是76.6MB。在我這次測試的情況中,大約花了 進行上傳。

# Create 3e6 Records
big_df <- data.frame( my_id = 1 : 3e6 , my_value = rnorm(3e6))

# Upload to Cloud,Index Name = "big_df3e6" 
docs_bulk(x , big_df , "big_df3e6" , chunk_size = 1000)

大約經過幾分鐘的等待後,我們可以在 Index Management 進行檢查,大約要稍後一下;我曾經看過 200多萬筆的數字,後來再等一下刷新,就可以發現的確300萬筆資料都正確無誤上傳。由於上傳時被改成 JSON ,所以檔案大小也變成了 221.5MB。
而在這300萬筆,常態分布的資料中大於0的有多少呢? 嗯,應該有150萬吧 ...
沒關係,讓我們來檢查測試一下,嗯 的確是接近 150萬筆的資料量;

Search(x, index = "big_df3e6" , q = "my_value:>0"   )$hits$total$value
[1] 1500748

另外要提的是,由於 docs_bulk 這個函數預設會在上傳後,把上傳的結果讓使用者檢視一次,所以在生產環境使用中,記得要先面再加上 invisible 這個函數!否則要先300萬筆的資料顯示哦。當然你也可以直接在顯示資料時,直接按 Ctrl+C 中斷,畢竟實際的資料已經上傳至雲端囉

invisible(docs_bulk(x , big_df , "big_df3e6" , chunk_size = 1000))

今天簡單的介紹了 Data.frame 上傳至雲端的手法。明天再讓我們試著上傳 list 結構的資料上雲囉


上一篇
新增 MySQL log 資料
下一篇
透過API上傳中文時的注意事項
系列文
Elastic 30天自我修行31

尚未有邦友留言

立即登入留言