<address id="tl19n"></address>
      <address id="tl19n"><nobr id="tl19n"></nobr></address>

        <address id="tl19n"></address>

          <address id="tl19n"></address>
          <form id="tl19n"></form>

              首頁 > 上網技巧 > PyOdps在交互式環境下的使用 讓探索ODPS數據更...

              PyOdps在交互式環境下的使用 讓探索ODPS數據更容易些

              時間:2022-01-09 12:37 作者:QQ地帶 我要評論

              春節結束了,是時候來些新鮮玩意,讓我們來看一些酷的東西。
               
              當當當當:隆重推出PyOdps logo。
               
              pyodps
               
              好像跑題了,好吧,讓我們言歸正傳。
               
              我們知道Python提供了一個交互式的環境,能夠方便探索和試驗想法。同時,IPython是Python交互環境的增強,提供了很多強大的功能;IPython Notebook(現在已經是Jupyter Notebook)則更酷,提供了一個web界面,除了提供交互環境,還是一個記錄計算過程的『筆記本』。
               
              PyOdps也提供了一系列在交互式環境下的增強工具,使得探索ODPS數據更方便快捷。
               
              配置ODPS帳號
              Python交互環境
              同一個環境支持配置若干個ODPS帳號,只需要:
               
              ?
              1
              2
              3
              In [1]: from odps.inter import setup
               
              In [2]: setup('**your-access_id**', '**your-access-key**', '**your-project**', endpoint='**your-endpoint**')
              此時這個帳號會被配置到一個叫做default的我們稱之為room的地方。以后我們再使用這個帳號只需要: 
               
              ?
              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              19
              20
              21
              In [3]: from odps.inter import enter
               
              In [4]: room = enter()
               
              In [5]: o = room.odps
               
              In [6]: o.get_table('dual')
              Out[6]: 
              odps.Table
                name: odps_test_sqltask_finance.`dual`
                schema:
                  c_int_a                 : bigint          
                  c_int_b                 : bigint          
                  c_double_a              : double          
                  c_double_b              : double          
                  c_string_a              : string          
                  c_string_b              : string          
                  c_bool_a                : boolean         
                  c_bool_b                : boolean         
                  c_datetime_a            : datetime        
                  c_datetime_b            : datetime
              通過room的odps屬性,我們可以取到ODPS的入口,這樣就可以接著進行ODPS操作了。配置了別的room比如叫做myodps,要取到ODPS入口,只需要enter('myodps').odps即可。
               
              list_rooms方法能列出所有的room。
               
              ?
              1
              2
              3
              4
              In [17]: from odps.inter import list_rooms
               
              In [18]: list_rooms()
              Out[18]: ['default', 'meta']
              IPython及Jupyter Notebook
              PyOdps還提供了IPython插件。首先我們需要加載插件:
               
              ?
              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              19
              20
              21
              22
              In [11]: %load_ext odps
               
              In [14]: %enter
              Out[14]: 
               
              In [15]: o = _.odps
               
              In [16]: o.get_table('dual')
              Out[16]: 
              odps.Table
                name: odps_test_sqltask_finance.`dual`
                schema:
                  c_int_a                 : bigint          
                  c_int_b                 : bigint          
                  c_double_a              : double          
                  c_double_b              : double          
                  c_string_a              : string          
                  c_string_b              : string          
                  c_bool_a                : boolean         
                  c_bool_b                : boolean         
                  c_datetime_a            : datetime        
                  c_datetime_b            : datetime        
              _下劃線能取到上一步的結果。
               
              保存常用的ODPS對象
              room除了提供ODPS入口的功能,還能保存常用的ODPS對象。比如,我們能把常用的表起個名字,給保存起來。
               
              ?
              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              19
              20
              21
              22
              23
              24
              25
              In [19]: iris = o.get_table('pyodps_iris')
               
              In [23]: room.store('iris_test', iris, desc='保存測試ODPS對象')
               
              In [28]: room['iris_test']
              Out[28]: 
              odps.Table
                name: odps_test_sqltask_finance.`pyodps_iris`
                schema:
                  sepallength           : double      
                  sepalwidth            : double      
                  petallength           : double      
                  petalwidth            : double      
                  name                  : string      
               
              In [29]: room.iris_test
              Out[29]: 
              odps.Table
                name: odps_test_sqltask_finance.`pyodps_iris`
                schema:
                  sepallength           : double      
                  sepalwidth            : double      
                  petallength           : double      
                  petalwidth            : double      
                  name                  : string 
               這兩種方式都可以取到保存的ODPS對象。如果要列出當前room保存的所有ODPS對象,則可以:
               
              ?
              1
              2
              3
              4
              5
              6
              In [30]: room.display()
              Out[30]: 
              default          desc
              name                 
              iris_test  保存測試ODPS對象
              iris       安德森鳶尾花卉數據集
              也可以使用IPython插件命令:
               
              ?
              1
              2
              3
              4
              5
              6
              In [31]: %stores
              Out[31]: 
              default          desc
              name                 
              iris_test  保存測試ODPS對象
              iris       安德森鳶尾花卉數據集
              要刪除某個ODPS對象:
               
              ?
              1
              2
              3
              4
              5
              6
              7
              In [32]: room.drop('iris_test')
               
              In [33]: %stores
              Out[33]: 
              default        desc
              name               
              iris     安德森鳶尾花卉數據集
              執行SQL命令
              PyOdps提供了執行SQL的方法,但是在交互式環境下卻不甚方便。使用PyOdps提供的IPython插件,可以通過sql命令來直接執行。
               
              在執行時,需要配置全局帳號,如果已經使用了enter方法或者命令,則已經配置;如果沒有,則會嘗試enter默認的room;如果這也沒有配置,則需要使用to_global方法。
               
              ?
              1
              2
              3
              In [34]: o = ODPS('**your-access-id**', '**your-secret-access-key**', project='**your-project**', endpoint='**your-end-point**'))
               
              In [35]: o.to_global()
              這時我們就可以使用sql命令,單個百分號輸入單行SQL,多行SQL使用兩個百分號:
               
              ?
              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              19
              20
              21
              22
              23
              In [37]: %sql select * from pyodps_iris limit 5
              |==========================================|   1 /  1  (100.00%)         3s
              Out[37]: 
                 sepallength  sepalwidth  petallength  petalwidth         name
              0          5.1         3.5          1.4         0.2  Iris-setosa
              1          4.9         3.0          1.4         0.2  Iris-setosa
              2          4.7         3.2          1.3         0.2  Iris-setosa
              3          4.6         3.1          1.5         0.2  Iris-setosa
              4          5.0         3.6          1.4         0.2  Iris-setosa
               
              In [38]: %%sql
                 ....: select * from pyodps_iris
                 ....: where sepallength < 5 
                 ....: limit 5
                 ....: 
              |==========================================|   1 /  1  (100.00%)        15s
              Out[38]: 
                 sepallength  sepalwidth  petallength  petalwidth         name
              0          4.9         3.0          1.4         0.2  Iris-setosa
              1          4.7         3.2          1.3         0.2  Iris-setosa
              2          4.6         3.1          1.5         0.2  Iris-setosa
              3          4.6         3.4          1.4         0.3  Iris-setosa
              4          4.4         2.9          1.4         0.2  Iris-setosa
              在Jupyter Notebook里,多行SQL會提供語法高亮:
               
               jupyter-odps-sql
               
              持久化pandas DataFrame為ODPS表
              使用persist命令即可:
               
              ?
              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              In [42]: import pandas as pd
               
              In [43]: df = pd.read_csv('https://raw.github.com/pydata/pandas/master/pandas/tests/data/iris.csv')
               
              In [48]: %persist df pyodps_iris_test
              |==========================================| 150 /150  (100.00%)         0s
               
              In [49]: from odps.df import DataFrame
               
              In [61]: DataFrame(o.get_table('pyodps_iris_test')).head(5)
              |==========================================|   1 /  1  (100.00%)         0s
              Out[61]: 
                 sepallength  sepalwidth  petallength  petalwidth         name
              0          5.1         3.5          1.4         0.2  Iris-setosa
              1          4.9         3.0          1.4         0.2  Iris-setosa
              2          4.7         3.2          1.3         0.2  Iris-setosa
              3          4.6         3.1          1.5         0.2  Iris-setosa
              4          5.0         3.6          1.4         0.2  Iris-setosa
              其它交互式方面的增強
              在交互式環境下,我們repr一個ODPS表的時候,會打印這個表的schema,包括字段注釋,省去了查這個表的meta信息。
               
              ?
              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              19
              In [41]: o.get_table('china_stock', project='odpsdemo')
              Out[41]: 
              odps.Table
                name: odpsdemo.`china_stock`
                schema:
                  d               : string      # 日期
                  c               : string      # 股票代碼
                  n               : string      # 股票名稱
                  t_close         : double      # 收盤價
                  high            : double      # 最高價
                  low             : double      # 最低價
                  opening         : double      # 開盤價
                  l_close         : double      # 昨日收盤價
                  chg             : double      # 漲跌額
                  chg_pct         : double      # 漲跌幅
                  vol             : bigint      # 成交量
                  turnover        : double      # 成交額
                partitions:
                  code            : string      # 股票代碼
              當使用sql命令或者使用DataFrame框架計算的時候,在終端或者Jupyter Notebook里都提供一個進度條來方便用戶來查看執行進度。
               
               jupyter-odps-sql2
               
              后記
              PyOdps現在處于快速迭代階段,我們所有的開發都是開源的。大家如果需要什么功能,可以給我們提issue(GitHub);也可以直接參與到開發,直接給我們發Pull Request就行啦。
               
              歡迎大家一起來建設PyOdps。

              標簽: ODPS
              頂一下
              (0)
              0%
              踩一下
              (0)
              0%

              Google提供的廣告

              国产古代一级a毛片,国产成人午夜在线直播,write.as 当众老师
                <address id="tl19n"></address>
                  <address id="tl19n"><nobr id="tl19n"></nobr></address>

                    <address id="tl19n"></address>

                      <address id="tl19n"></address>
                      <form id="tl19n"></form>