91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

hive+python數據分析是怎么入門的

發布時間:2021-12-02 17:31:51 來源:億速云 閱讀:223 作者:柒染 欄目:云計算

本篇文章為大家展示了hive+python數據分析是怎么入門的,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

為什么要使用hive+python來分析數據

舉個例子,

當年沒有數據庫的時候, 人們通過編程來操作文件系統, 這相當于我們編寫mapreduce來分析數據.

后來有了數據庫, 沒人再操作文件系統了(除非有其它需求), 而是直接使用sql再加一些數據的處理. 這就相當于 hive + python了

hive + python能解決大多的需求, 除非你的數據是非結構化數據, 此時你就回到了遠古時代不得不寫mapreduce了.

而為什么不使用hive+java, hive+c, hive+...

因為:

python真是太好用了, 腳本語言, 無需編譯, 有強大的機器學習庫, 適合科學計算(這就是數據分析啊!!)


使用hive+python來分析數據

hive與python的分工: 使用hive sql作為python的數據源, python的輸出作為map的輸出, 再使用hive的聚合函數作為reduce.

下面使用一個例子來分析: 統計每個人在某日期人下吃的各種食品的數量

建表 user_foods 用戶食品表

hive> create table user_foods (user_id  string, food_type string, datetime string
)  partitioned by(dt string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE

# partitioned by(dt string) 以日期分區
# 以\n分隔, 字段與字段間以\t分隔.

根據業務需要, 因為是按天來統計, 為減少分析時的數據量, 上述hive表以dt(日期)為分區.

創建Hive表后, 會在HDFS /hive/目錄下創建一個與表名同名的文件夾

hive+python數據分析是怎么入門的

導入數據

建立分區

hive> ALTER TABLE user_foods ADD PARTITION(dt='2014-06-07');

創建分區后, hdfs目錄/hive/user_foods/下多了一個df='2014-06-07'的目錄

創建測試數據

創建一個文件如data.txt, 加入測試數據

user_1	food1	2014-06-07 09:00
user_1	food1	2014-06-07 09:02
user_1	food2	2014-06-07 09:00
user_2	food2	2014-06-07 09:00
user_2	food23	2014-06-07 09:00

導入數據

hive> LOAD DATA LOCAL INPATH '/Users/life/Desktop/data.txt' OVERWRITE INTO TABLE user_foods PARTITION(dt='2014-06-07');

導入成功后, 使用select * from user_foods查看下.

或使用

hive> select * from user_foods where user_id='user_1'

這會生成一個mapreduce

僅使用hive來分析

"統計每個人在某日期人下吃的各種食品的數量"  太過簡單, 不需要python就可實現:

hive> select user_id, food_type, count(*) from user_foods where dt='2014-06-07' group by user_id, food_type;

結果:

hive+python數據分析是怎么入門的

結合使用python

如果需要對數據清洗或更進一步處理, 那么肯定需要自定義map, 這就可以使用python來實現了.

比如food2與food23認為是同一類型食品, 此時利用python進行數據清洗, python的腳本如下: (m.py)

#!/usr/bin/env python
#encoding=utf-8

import sys
       
if __name__=="__main__":

    # 解析每一行數據
    for line in sys.stdin:
        # 略過空行
        if not line or not line.strip():
            continue

        # 這里用try 避免特殊行解析錯誤導致全部出錯
        try:
            userId, foodType, dt = line.strip().split("\t")
        except:
            continue

        # 清洗數據, 空數據略過
        if userId == '' or foodType == '':
            continue

        # 清洗數據
        if(foodType == "food23"):
        	foodType = "food2"
        
        # 輸出, 以\t分隔, 即map的輸出
        print userId + "\t" + foodType

再使用hql結合python腳本來分析, 有以下兩步.

1. 加入python腳本, 相當于將腳本加入到 distributed cache

2. 執行, 使用transform和using

hive> add file /Users/life/Desktop/m.py;
hive> select user_id, food_type, count(*) from (
select transform (user_id, food_type, datetime) using 'python m.py' as (user_id, food_type)
from user_foods where dt='2014-06-07'
) tmp group by user_id, food_type;

結果:

hive+python數據分析是怎么入門的

python腳本調試建議

1. 首先保證腳本沒有語法錯誤, 可以執行python m.py來驗證
2. 確保代碼沒有其它輸出
3. 可以使用測試數據來測試腳本, 比如:

$> cat data.txt | python m.py
user_1	food1
user_1	food1
user_1	food2
user_2	food2
user_2	food2

1, 2, 3都正確后, 如果再使用hive+python有錯誤, 可能的錯誤有:

1. python腳本對數據的處理不健壯, 有些邊界條件沒有考慮, 導致python出現exception

2. 自己總結吧...

其它

上面這個例子的python腳本充當map的角色, 當然也可以再建立一個reduce.py來統計map的輸出而不使用hive的聚合函數.

這是建立在hive已不能滿足你的需求之上的.

上述內容就是hive+python數據分析是怎么入門的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

客服| 佛山市| 丽水市| 香港| 二连浩特市| 黄冈市| 山东省| 耿马| 大荔县| 南部县| 卫辉市| 会理县| 翁牛特旗| 军事| 甘南县| 盐边县| 隆德县| 梁山县| 瑞丽市| 汾阳市| 建德市| 夏津县| 眉山市| 新化县| 三都| 承德市| 武平县| 德化县| 柘城县| 宜丰县| 辽宁省| 宁夏| 中阳县| 台江县| 万州区| 亳州市| 康保县| 错那县| 肥西县| 黄平县| 应用必备|