Python讀取hbase數據庫

1. hbase連接

首先用hbase shell 命令來進入到hbase數據庫,然后用list命令來查看hbase下所有表,以其中表“DB_level0”為例,可以看到庫名“baotouyiqi”是拼接的,python代碼訪問時先連接:

def hbase_connection(hbase_master, hbase_port, table_prefix=None):connection = happybase.Connection(host=hbase_master, port=hbase_port, table_prefix=table_prefix)return connection
connection = hbase_connection(hbase_master, hbase_port, table_prefix)  # 在連接的時候創建項目空間
table = connection.table(tablename)  # 獲取表連接

備注:完整代碼在最后,想運行的直接滑倒最后復制即可

2. 按條件讀取hbase數據

然后按照條件來查詢表中想要的數據集,這里只列舉兩個條件:時間區間和指定列。同樣,我們在shell下用scan命令來查看表中的數據結構:

可以看到第一列是ROW,第二列是COLUMN+CELL,python代碼取數據方法差不多:

date_prex_start = bytes('dt_' + starttime, encoding='utf-8')  # row_start
date_prex_end = bytes('dt_' + endtime, encoding='utf-8')  # row_stop
# 通過設置row key的前綴row_prefix參數來進行局部掃描
outdata = dict(table.scan(row_start=date_prex_start, row_stop=date_prex_end,columns=[onecolumn]))

得到的結果如下,是個字典格式:

3. 按格式輸出hbase數據結果

我們希望輸出的結果是dataframe的,而且第一列是time,第二列是value,所以就做個簡單格式處理:

timesep = list(map(lambda x: x.decode('utf-8').replace('dt_', ''), outdata.keys()))
tempdata = list(outdata.values())
valuelist = list(map(lambda x: float(list(x.values())[0]), tempdata))
if len(timesep) > 0:db_data2 = pd.DataFrame({'時間': timesep, onecolumn: valuelist})db_data2.loc[:, '時間2'] = [i[:16] for i in db_data2['時間']]db_data2 = db_data2.drop_duplicates(subset=['時間2'], keep='last')  # 一分鐘內多次數值取一個即可
else:db_data2 = pd.DataFrame()
if len(db_data2) < 1:return pd.DataFrame()
db_data2.loc[:, '時間戳'] = [time.mktime(time.strptime(i, "%Y-%m-%d %H:%M:%S")) for i in db_data2['時間']]
db_data2 = db_data2.sort_values(by=['時間戳'], ascending=False)  # 將最新的數值放最前面
db_data3 = db_data2.drop(columns=['時間2', '時間戳'])
db_data3.columns = ['time', 'value']

4. 完整代碼(code)

import happybase
import time
import pandas as pd
from pathlib import Pathos_file_name = Path(__file__).namedef hbase_connection(hbase_master, hbase_port, table_prefix=None):connection = happybase.Connection(host=hbase_master, port=hbase_port, table_prefix=table_prefix)return connectiondef get_data_by_tum(hbase_master, hbase_port, table_prefix, tablename, columnslist, starttime, endtime):columnsid = '$'.join(columnslist)onecolumn = 'TimeSe:dt_' + columnsid  # columnconnection = hbase_connection(hbase_master, hbase_port, table_prefix)  # 在連接的時候創建項目空間table = connection.table(tablename)  # 獲取表連接date_prex_start = bytes('dt_' + starttime, encoding='utf-8')  # row_startdate_prex_end = bytes('dt_' + endtime, encoding='utf-8')  # row_stop# 通過設置row key的前綴row_prefix參數來進行局部掃描outdata = dict(table.scan(row_start=date_prex_start, row_stop=date_prex_end,columns=[onecolumn]))timesep = list(map(lambda x: x.decode('utf-8').replace('dt_', ''), outdata.keys()))tempdata = list(outdata.values())valuelist = list(map(lambda x: float(list(x.values())[0]), tempdata))if len(timesep) > 0:db_data2 = pd.DataFrame({'時間': timesep, onecolumn: valuelist})db_data2.loc[:, '時間2'] = [i[:16] for i in db_data2['時間']]db_data2 = db_data2.drop_duplicates(subset=['時間2'], keep='last')  # 一分鐘內多次數值取一個即可else:db_data2 = pd.DataFrame()if len(db_data2) < 1:return pd.DataFrame()db_data2.loc[:, '時間戳'] = [time.mktime(time.strptime(i, "%Y-%m-%d %H:%M:%S")) for i in db_data2['時間']]db_data2 = db_data2.sort_values(by=['時間戳'], ascending=False)  # 將最新的數值放最前面db_data3 = db_data2.drop(columns=['時間2', '時間戳'])db_data3.columns = ['time', 'value']return db_data3if __name__ == '__main__':begin_time = '2023-08-22 00:00:00'end_time = '2023-08-23 00:00:00'hbase_master = "142.21.8.22"hbase_port = 9097table_prefix = "baotouyiqi"table_name = "DB_level0"onedata = ["62340", "20", "204"]dataget = get_data_by_tum(hbase_master, hbase_port, table_prefix, table_name,onedata, begin_time, end_time)print(dataget)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714394.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714394.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714394.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

red hat 6.9版本7.9版本 忘記root密碼重置方法

文章目錄 1、重置密碼具體步驟Oracle Linux 6.9版本&#xff1a;1、開機到此界面按e2、在以下界面選擇后按e3、選擇相應內核后按e4、在此界面輸入 single 回車5、回到內核界面后按b進入引導系統6、在#后輸入passwd root修改密碼7、修改密碼&#xff1a;8、Reboot重啟9、使用新密…

【工作實踐-06】uniapp使用webView

一、建立APP頁面和webview的通訊 1.引入webview.js App 端使用 uni.web-view.js 的最低版為 uni.webview.1.5.4.js APP端可以支持網絡網頁和本地網頁&#xff0c;但如果使用本地網頁和相關資源&#xff08;js、css等文件&#xff09;必須放在 static 目錄下。 2.引入搭橋docum…

PostgreSQL中int類型達到上限的一些處理方案

使用int類型作為表的主鍵在pg中是很常見的情況&#xff0c;但是pg中int類型的范圍在-2147483648到2147483647&#xff0c;最大只有21億&#xff0c;這個在一些大表中很容易就會達到上限。一旦達到上限&#xff0c;那么表中便沒辦法在插入數據了&#xff0c;這個將會是很嚴重的問…

【react native】css踩坑記錄

1、IOS上面opacity重疊失效 在 iOS 上&#xff0c;當兩個具有相同背景色的元素重疊時&#xff0c;不透明度&#xff08;opacity&#xff09;較低的元素會顯示在較高的元素上方。 所以考慮使用rgba的形式。 // 對于下面這種寫法&#xff0c;如果存在container和activeIndicat…

word文檔空格不能有下劃線【筆記】

word文檔空格不能有下劃線 2024-3-1 21:20:24 推薦 word下劃線打不出來了&#xff0c;是怎么回事&#xff1f; 問題 字后面打不出來下劃線 操作 1.點擊文件 左上角&#xff0c;點擊“文件”。 2.點擊選項 鼠標下滑&#xff0c;點擊“選項”。 3.點擊常規與保存 點擊“…

java基礎-mysql

文章目錄 mysql基礎面試題什么是mysql什么是事務并發事務帶來的影響事物的隔離級別索引大表優化什么是池化思想&#xff0c;什么是數據庫連接池&#xff0c;為什么要用數據庫連接池?鎖&#xff0c;表鎖&#xff1b;樂觀鎖&#xff0c;悲觀鎖MySQL主備同步的基本原理SQL什么情況…

[⑥5G NR]: 無線接口協議,信道映射學習

5G系統整體包括核心網、接入網以及終端部分&#xff0c;接入網與終端間通過無線空口協議棧進行連接。無線接口可分為三個協議層&#xff1a;物理層&#xff08;L1&#xff09;、數據鏈路層&#xff08;L2&#xff09;和網絡層&#xff08;L3&#xff09;。 L1&#xff1a;物理…

【python】json轉成成yaml中文編碼異常顯示成:\u5317\u4EAC\u8DEF123\u53F7

姊妹篇&#xff1a;【python】json轉成成yaml json數據 {"name": "張三","age": 30,"isMarried": false,"children": [{"name": "小王","age": 5},{"name": "小李",&qu…

mysql冷備

數據庫備份類型 冷備份&#xff1a;在數據庫停止服務的情況下進行備份 熱備份&#xff1a;在數據庫處于運行狀態下進行備份 溫備份&#xff1a;不可寫但可讀的情況下進行備份 冷備分時&#xff0c;只需要在停止數據庫后&#xff0c;拷貝數據目錄到另一個地方即可。 mysql 啟…

為什么不能啟動游戲錯誤代碼126 加載bugreportnew.dll失敗

錯誤代碼126通常表示在嘗試加載某個動態鏈接庫&#xff08;DLL&#xff09;文件時出現了問題。在您提到的例子中&#xff0c;bugreportnew.dll 文件未能成功加載&#xff0c;這可能是由于以下幾個原因&#xff1a; 騰訊云2024新春采購節優惠活動入口&#xff1a;https://curl.q…

Linux---進程信號

一、信號的概念 信號是一種向目標進程發送通知消息的機制 信號的特性(可以結合紅綠燈、防空警報等生活樣例來理解) 1、在信號沒有出現之前&#xff0c;我們就已經知道如何去處理信號&#xff0c;即我們認識信號 2、信號是異步產生的&#xff0c;即我們不知道它具體何時產生 3、…

基于MQTT協議實現微服務架構事件總線

一、場景描述 昨天在博客《客戶端訂閱服務端事件的實現方法》中提出了利用websocket、服務端EventEmitter和客戶端mitt實現客戶端訂閱服務端事件&#xff0c;大大簡化了客戶端對服務端數據實時響應的邏輯。上述方案適用于單服務節點的情形。 對于由服務集群支撐的微服務架構&…

Redis 之七:穿透、擊穿、雪崩

&#xff08;本內容部分來自知乎網等網絡&#xff09; Redis 緩存的使用&#xff0c;極大的提升了應用程序的性能和效率&#xff0c;特別是數據查詢方面。但同時&#xff0c;它也帶來了一些問題。其中&#xff0c;最要害的問題&#xff0c;就是數據的一致性問題&#xff0c;從嚴…

Educational Codeforces Round 132 (Rated for Div. 2) E. XOR Tree(啟發式合并+貪心)

題目 n(n<2e5)個點的樹&#xff0c;點i權值ai&#xff08;1<ai<2^30&#xff09; 修改最少的點的權值&#xff0c;使得樹上不存在異或和為0的簡單路徑&#xff0c;輸出最少的點數 權值可以被修改成任意正整數&#xff08;可以是無限大&#xff09; 思路來源 官方…

【leetcode】環形鏈表?環形鏈表II

大家好&#xff0c;我是蘇貝&#xff0c;本篇博客帶大家刷題&#xff0c;如果你覺得我寫的還不錯的話&#xff0c;可以給我一個贊&#x1f44d;嗎&#xff0c;感謝?? 目錄 1.環形鏈表解題拓展&#xff1a; 2.環形鏈表II 1.環形鏈表 點擊查看題目 解題 思路: bool hasCycle…

【算法集訓】基礎算法:基礎排序 - 插入排序

一、基本理解 插入排序(nsertion Sort)&#xff0c;一般也被稱為直接插入排序&#xff0c;是一種簡單直觀的排序算法。 **工作原理&#xff1a;**將待排列元素劃分為「已排序」和「未排序」兩部分&#xff0c;每次從「未排序的」元素中選 擇一個插入到「已排序的」元素中的正確…

劍指offer58—II 左旋轉字符串 c++

題目 字符串的左旋轉操作是把字符串前面的若干個字符轉移到字符串的尾部。請定義一個函數實現字符串左旋轉操作的功能。比如,輸入字符串"abcdefg"和數字2,該函數將返回左旋轉兩位得到的結果"cdefgab"。 示例 1: 輸入: s = “abcdefg”, k = 2 輸出: “…

MySQL 多表查詢 連接查詢 內連接

介紹 內連接查詢是兩張表中交集的部分 連接模式 隱式內連接 SELECT 字段列表 FROM 表1,表2 WHERE 條件顯式內連接 SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 連接條件案例 有兩張表一個表為學生表&#xff0c;另一個表為班級表&#xff0c;現在需要查詢學生時候在查…

接口測試(全)

&#x1f345; 視頻學習&#xff1a;文末有免費的配套視頻可觀看 &#x1f345; 關注公眾號【互聯網雜貨鋪】&#xff0c;回復 1 &#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 大多數人對于接口測試都覺得是一種高大上的測試&#xff0c;覺得…

羊大師分析,羊奶粉適合什么樣的人群喝

羊大師分析&#xff0c;羊奶粉適合什么樣的人群喝 羊奶粉適合多種人群食用&#xff0c;包括兒童、老年人、孕婦以及身體虛弱或處于疾病康復期的人群。 對于兒童來說&#xff0c;羊奶粉是一種很好的營養品。它含有豐富的蛋白質、脂肪、礦物質和維生素&#xff0c;能夠滿足兒童…