Permalink
Browse files

upgrade to 0.6.0

  • Loading branch information...
1 parent 2022ba1 commit 4906b0162534519ffa62f7b1e35a35e05ab909cf @chineking chineking committed Aug 26, 2016
Showing with 10,731 additions and 2,548 deletions.
  1. +9 −0 .gitignore
  2. +2 −1 MANIFEST.in
  3. +18 −0 README.md
  4. +21 −0 README.rst
  5. +1 −0 docs/Makefile
  6. BIN docs/source/_static/{output_31_1.png → df-age-hist.png}
  7. 0 docs/source/_static/{output_36_0.svg → df-op-merge-visualize.svg}
  8. BIN docs/source/_static/{output_8_1.png → df-plot-iris-collection.png}
  9. BIN docs/source/_static/{output_10_1.png → df-plot-iris-hist.png}
  10. BIN docs/source/_static/{output_7_1.png → df-plot-iris-sequence.png}
  11. BIN docs/source/_static/{output_9_1.png → df-plot-iris-sum.png}
  12. 0 docs/source/_static/{output_35_0.svg → df-steps-visualize.svg}
  13. BIN docs/source/_static/{output_29_1.png → df-value-count-plot.png}
  14. BIN docs/source/_static/dfview-data-grid.png
  15. BIN docs/source/_static/dfview-pie-aggsel.png
  16. BIN docs/source/_static/dfview-scatter-opts.png
  17. BIN docs/source/_static/dfview-scatter.png
  18. BIN docs/source/_static/{ml_exec_notify.png → exec_notify.png}
  19. BIN docs/source/_static/ml_task_details_dialog.png
  20. BIN docs/source/_static/{ml_progress_example.png → progress_example.png}
  21. BIN docs/source/_static/task_details_dialog.png
  22. +5 −6 docs/source/{functions-zh.rst → base-functions-zh.rst}
  23. +5 −6 docs/source/{instances-zh.rst → base-instances-zh.rst}
  24. +1 −2 docs/source/{projects-zh.rst → base-projects-zh.rst}
  25. +3 −4 docs/source/{resources-zh.rst → base-resources-zh.rst}
  26. +8 −7 docs/source/{sql-zh.rst → base-sql-zh.rst}
  27. +10 −16 docs/source/{tables-zh.rst → base-tables-zh.rst}
  28. +19 −0 docs/source/base-zh.rst
  29. +4 −0 docs/source/conf.py
  30. +15 −0 docs/source/df-basic-zh.rst
  31. +2 −2 docs/source/df-debug-instruction-zh.rst
  32. +159 −8 docs/source/df-element-zh.rst
  33. +67 −1 docs/source/df-join-union-zh.rst
  34. +52 −4 docs/source/df-plot-zh.rst
  35. +78 −0 docs/source/df-query-zh.rst
  36. +2 −2 docs/source/df-quickstart-zh.rst
  37. +115 −5 docs/source/df-sort-distinct-apply-zh.rst
  38. +6 −6 docs/source/df-zh.rst
  39. +2 −13 docs/source/index.rst
  40. +82 −3 docs/source/{cl-zh.rst → interactive-zh.rst}
  41. +25 −19 docs/source/options-zh.rst
  42. +4 −2 odps/__init__.py
  43. +1 −0 odps/compat/__init__.py
  44. +6 −7 odps/config.py
  45. +11 −10 odps/core.py
  46. +78 −93 odps/dag.py
  47. +59 −0 odps/df/backends/context.py
  48. +2 −15 odps/df/backends/core.py
  49. +114 −73 odps/df/backends/engine.py
  50. +7 −6 odps/df/backends/formatter.py
  51. +13 −0 odps/df/backends/frame.py
  52. +63 −62 odps/df/backends/odpssql/analyzer.py
  53. +105 −32 odps/df/backends/odpssql/codegen.py
  54. +34 −23 odps/df/backends/odpssql/compiler.py
  55. +8 −5 odps/df/backends/odpssql/context.py
  56. +78 −45 odps/df/backends/odpssql/engine.py
  57. +1 −0 odps/df/backends/odpssql/tests/test_codegen.py
  58. +409 −335 odps/df/backends/odpssql/tests/test_compiler.py
  59. +222 −3 odps/df/backends/odpssql/tests/test_engine.py
  60. +20 −0 odps/df/backends/optimize/__init__.py
  61. +204 −0 odps/df/backends/optimize/columnpruning.py
  62. +58 −49 odps/df/backends/{optimize.py → optimize/core.py}
  63. +192 −0 odps/df/backends/optimize/predicatepushdown.py
  64. +18 −0 odps/df/backends/optimize/tests/__init__.py
  65. +282 −0 odps/df/backends/optimize/tests/test_columnpruning.py
  66. +203 −0 odps/df/backends/optimize/tests/test_predicatepushdown.py
  67. +62 −0 odps/df/backends/optimize/utils.py
  68. +23 −21 odps/df/backends/pd/analyzer.py
  69. +52 −24 odps/df/backends/pd/compiler.py
  70. +56 −16 odps/df/backends/pd/engine.py
  71. +126 −2 odps/df/backends/pd/tests/test_engine.py
  72. +5 −1 odps/df/backends/tests/core.py
  73. +62 −0 odps/df/backends/tests/test_context.py
  74. +12 −1 odps/df/backends/tests/test_formatter.py
  75. +3 −3 odps/df/backends/tests/test_mixed_compiler.py
  76. +2 −4 odps/df/backends/tests/test_mixed_engine.py
  77. +16 −7 odps/df/core.py
  78. +387 −88 odps/df/expr/collections.py
  79. +272 −186 odps/df/expr/core.py
  80. +6 −2 odps/df/expr/element.py
  81. +27 −35 odps/df/expr/expressions.py
  82. +26 −11 odps/df/expr/groupby.py
  83. +13 −8 odps/df/expr/merge.py
  84. +97 −7 odps/df/expr/reduction.py
  85. +0 −7 odps/df/expr/tests/test_arithmetic.py
  86. +21 −11 odps/df/expr/tests/test_collections.py
  87. +4 −2 odps/df/expr/tests/test_core.py
  88. +0 −4 odps/df/expr/tests/test_datetimes.py
  89. +0 −12 odps/df/expr/tests/test_element.py
  90. +0 −17 odps/df/expr/tests/test_expressions.py
  91. +3 −0 odps/df/expr/tests/test_groupby.py
  92. +7 −4 odps/df/expr/tests/test_merge.py
  93. +0 −3 odps/df/expr/tests/test_reduction.py
  94. +0 −5 odps/df/expr/tests/test_strings.py
  95. +2 −2 odps/df/expr/tests/test_utils.py
  96. +0 −8 odps/df/expr/tests/test_window.py
  97. +1 −0 odps/df/expr/utils.py
  98. +3 −0 odps/df/tools/plotting.py
  99. +131 −0 odps/df/ui.py
  100. +35 −0 odps/df/utils.py
  101. +37 −2 odps/examples/tables.py
  102. +3 −0 odps/inter.py
  103. +7 −0 odps/ipython/__init__.py
  104. +194 −0 odps/ipython/completer.py
  105. +220 −202 odps/ipython/magics.py
  106. +18 −0 odps/ipython/tests/__init__.py
  107. +69 −0 odps/ipython/tests/test_completer.py
  108. +134 −40 odps/lib/cloudpickle.py
  109. +195 −0 odps/lib/importer.py
  110. +69 −49 odps/lib/tests/test_cloudpickle.py
  111. +89 −0 odps/lib/tests/test_importer.py
  112. +1 −1 odps/models/resource.py
  113. +0 −3 odps/models/tests/__init__.py
  114. +0 −1 odps/models/tests/test_tables.py
  115. +207 −76 odps/static/algorithms/classifier.xml
  116. +9 −12 odps/static/algorithms/clustering.xml
  117. +23 −0 odps/static/algorithms/feature.xml
  118. +41 −63 odps/static/algorithms/network.xml
  119. +5 −1 odps/static/algorithms/preprocess.xml
  120. +5 −7 odps/static/algorithms/recommend.xml
  121. +26 −25 odps/static/algorithms/regression.xml
  122. +279 −0 odps/static/algorithms/statistics.xml
  123. +77 −27 odps/static/algorithms/{nlp.xml → text.xml}
  124. +750 −0 odps/static/data/dow_jones.txt
  125. +96 −0 odps/static/ui/Gruntfile.js
  126. +0 −119 odps/static/ui/common.js
  127. +0 −1 odps/static/ui/common.min.js
  128. +0 −66 odps/static/ui/html_notify.js
  129. +0 −1 odps/static/ui/html_notify.min.js
  130. +19 −0 odps/static/ui/package.json
  131. +0 −64 odps/static/ui/pai.retry.js
  132. +0 −1 odps/static/ui/pai.retry.min.js
  133. +0 −254 odps/static/ui/progress.js
  134. +0 −1 odps/static/ui/progress.min.js
  135. BIN odps/static/ui/src/chosen-sprite.png
  136. BIN odps/static/ui/src/chosen-sprite@2x.png
  137. +3 −0 odps/static/ui/src/chosen.css
  138. +1,284 −0 odps/static/ui/src/chosen.js
  139. +88 −0 odps/static/ui/src/common.js
  140. +1,039 −0 odps/static/ui/src/df-view.js
  141. +28 −0 odps/static/ui/src/echarts.min.js
  142. +32 −0 odps/static/ui/src/fonts/custom-font.css
  143. BIN odps/static/ui/src/fonts/custom-font.eot
  144. +41 −0 odps/static/ui/src/fonts/custom-font.svg
  145. BIN odps/static/ui/src/fonts/custom-font.ttf
  146. BIN odps/static/ui/src/fonts/custom-font.woff
  147. +65 −0 odps/static/ui/src/html-notify.js
  148. +62 −0 odps/static/ui/src/ml-retry.js
  149. +281 −0 odps/static/ui/src/progress.js
  150. +25 −1 odps/static/ui/{ → src}/styles.css
  151. +512 −0 odps/static/ui/src/westeros.js
  152. +0 −1 odps/static/ui/styles.min.css
  153. BIN odps/static/ui/target/chosen-sprite.png
  154. BIN odps/static/ui/target/chosen-sprite@2x.png
  155. +1 −0 odps/static/ui/target/chosen.css
  156. +1 −0 odps/static/ui/target/fonts/custom-font.css
  157. BIN odps/static/ui/target/fonts/custom-font.eot
  158. +41 −0 odps/static/ui/target/fonts/custom-font.svg
  159. BIN odps/static/ui/target/fonts/custom-font.ttf
  160. BIN odps/static/ui/target/fonts/custom-font.woff
  161. +54 −0 odps/static/ui/target/main.js
  162. +1 −0 odps/static/ui/target/styles.css
  163. +0 −3 odps/tests/__init__.py
  164. +0 −6 odps/tests/core.py
  165. +61 −0 odps/tests/test_dag.py
  166. +2 −2 odps/tests/test_tempobjs.py
  167. +0 −3 odps/tunnel/tests/__init__.py
  168. +1 −1 odps/ui/__init__.py
  169. +10 −120 odps/ui/common.py
  170. +5 −6 odps/ui/progress.py
  171. +0 −19 odps/ui/tests/test_ui.py
  172. +14 −2 odps/utils.py
  173. +3 −0 requirements-full.txt
  174. +147 −12 setup.py
View
@@ -26,6 +26,15 @@ pip-log.txt
# xlib logs
xlibsyslog
+# node-js
+node_modules
+jspm_packages
+
+npm-debug.log*
+.npm
+.node_repl_history
+.grunt
+
# Unit test / coverage reports
.coverage
htmlcov
View
@@ -1,7 +1,8 @@
recursive-include odps/static *.*
recursive-include odps/internal/static *.*
+prune odps/static/ui/node_modules
include requirements.txt
global-include *.pyx
global-include *.pxd
include odps/src/crc32c/crc32c.c
-global-exclude *_c.c
+global-exclude *_c.c
View
@@ -158,6 +158,24 @@ $ pyou plus.Plus < plus.input
5
```
+## Contributing
+
+For a development install, clone the repository and then install from source:
+
+```
+git clone https://github.com/aliyun/aliyun-odps-python-sdk
+cd pyodps
+pip install -r requirements.txt -e .
+```
+
+If you need to modify the frontend code, you need to install [nodejs/npm](https://www.npmjs.com/). To build and
+install your frontend code, use
+
+```
+python setup.py build_js
+python setup.py install_js
+```
+
## License
Licensed under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.html)
View
@@ -163,6 +163,27 @@ Python UDF Debugging Tool
2
5
+Contributing
+------------
+
+For a development install, clone the repository and then install from
+source:
+
+::
+
+ git clone https://github.com/aliyun/aliyun-odps-python-sdk
+ cd pyodps
+ pip install -r requirements.txt -e .
+
+If you need to modify the frontend code, you need to install
+`nodejs/npm <https://www.npmjs.com/>`__. To build and install your
+frontend code, use
+
+::
+
+ python setup.py build_js
+ python setup.py install_js
+
License
-------
View
@@ -52,6 +52,7 @@ clean:
rm -rf $(BUILDDIR)/*
html:
+ (cd ..; find . -name \*.pyc -delete)
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Deleted file not rendered
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@@ -1,35 +1,34 @@
.. _functions:
-******
函数
-******
+========
ODPS用户可以编写自定义 `函数 <https://docs.aliyun.com/#/pub/odps/basic/definition&function>`_ 用在ODPS SQL中。
基本操作
-=========
+---------
同样的,可以调用 ``list_functions`` 来获取项目空间下的所有函数,``exist_function`` 能判断是否存在函数,
``get_function`` 能获取函数。
创建函数
-=========
+---------
.. code-block:: python
>>> resource = odps.get_resource('my_udf.py')
>>> function = odps.create_function('test_function', class_type='my_udf.Test', resources=[resource, ])
删除函数
-=========
+---------
.. code-block:: python
>>> odps.delete_function('test_function')
>>> function.drop() # Function对象存在时直接调用drop
更新函数
-=========
+---------
只需对函数调用 ``update`` 方法即可。
@@ -1,14 +1,13 @@
.. _instances:
-*********
任务实例
-*********
+========
Task如SQLTask是ODPS的基本计算单元,当一个Task在执行时会被实例化,
以 `ODPS实例 <https://help.aliyun.com/document_detail/27825.html>`_ 的形式存在。
基本操作
-========
+--------
可以调用 ``list_instances`` 来获取项目空间下的所有instance,``exist_instance`` 能判断是否存在某instance,
``get_instance`` 能获取实例。
@@ -23,7 +22,7 @@ Task如SQLTask是ODPS的基本计算单元,当一个Task在执行时会被实
停止一个instance可以在odps入口使用 ``stop_instance``,或者对instance对象调用 ``stop`` 方法。
获取logview地址
-=================
+---------------
通过调用 ``get_logview_address`` 方法即可。
@@ -33,7 +32,7 @@ Task如SQLTask是ODPS的基本计算单元,当一个Task在执行时会被实
>>> print(instance.get_logview_address())
任务实例状态
-===============
+-------------
一个instance的状态可以是 ``Running````Suspended`` 或者 ``Terminated``,用户可以通过 ``status`` 属性来获取状态。
``is_terminated`` 方法返回当前instance是否已经执行完成,``is_successful`` 方法返回当前instance是否正确完成执行,
@@ -55,7 +54,7 @@ Task如SQLTask是ODPS的基本计算单元,当一个Task在执行时会被实
如果最终任务执行失败,则会抛出相关异常。
子任务操作
-=============
+-----------
一个Instance真正运行时,可能包含一个或者多个子任务,我们称为Task,要注意这个Task不同于ODPS的计算单元。
@@ -1,8 +1,7 @@
.. _projects:
-********
项目空间
-********
+=========
`项目空间 <https://docs.aliyun.com/#/pub/odps/basic/definition&project>`_ 是ODPS的基本组织单元,
有点类似于Database的概念。
@@ -1,8 +1,7 @@
.. _resource:
-******
资源
-******
+=======
`资源 <https://docs.aliyun.com/#/pub/odps/basic/definition&resource>`_ 在ODPS上常用在UDF和MapReduce中。
@@ -12,7 +11,7 @@
在PyODPS中,主要支持两种资源类型,一种是文件,另一种是表。下面分别说明。
文件资源
-=========
+---------
文件资源包括基础的 ``file`` 类型、以及 ``py````jar````archive``
@@ -63,7 +62,7 @@
因此 ``rb`` 就是指以二进制读模式打开文件,``r+b`` 是指以二进制读写模式打开。
表资源
-=======
+-------
创建表资源
~~~~~~~~~~~~
@@ -1,23 +1,24 @@
.. _sql:
-****
SQL
-****
+=====
PyODPS支持ODPS SQL的查询,并可以读取执行的结果。
``execute_sql`` 或者 ``run_sql`` 方法的返回值是 `运行实例 <instances-zh.html>`_ 。
执行SQL
-=======
+-------
.. code-block:: python
>>> odps.execute_sql('select * from dual') # 同步的方式执行,会阻塞直到SQL执行完成
>>> instance = odps.run_sql('select * from dual') # 异步的方式执行
>>> instance.wait_for_success() # 阻塞直到完成
+.. _sql_hints:
+
设置运行参数
-=============
+------------
有时,我们在运行时,需要设置运行时参数,我们可以通过设置 ``hints`` 参数,参数类型是dict。
@@ -35,7 +36,7 @@ PyODPS支持ODPS SQL的查询,并可以读取执行的结果。
读取SQL执行结果
-===============
+---------------
运行SQL的instance能够直接执行 ``open_reader`` 的操作,一种情况是SQL返回了结构化的数据。
@@ -53,7 +54,7 @@ PyODPS支持ODPS SQL的查询,并可以读取执行的结果。
>>> print(reader.raw)
设置alias
-==========
+------------
有时在运行时,比如某个UDF引用的资源是动态变化的,我们可以alias旧的资源名到新的资源,这样免去了重新删除并重新创建UDF的麻烦。
@@ -112,7 +113,7 @@ PyODPS支持ODPS SQL的查询,并可以读取执行的结果。
设置biz_id
-=============
+------------
需要设置全局options里的biz_id。
@@ -1,13 +1,12 @@
.. _tables:
-****
-****
+======
`表 <https://docs.aliyun.com/#/pub/odps/basic/definition&table>`_ 是ODPS的数据存储单元。
基本操作
-========
+--------
我们可以用 ``list_tables`` 来列出项目空间下的所有表。
@@ -57,7 +56,7 @@
<column c_datetime_b, type datetime>]
创建表的Schema
-==============
+---------------
有两种方法来初始化。第一种方式通过表的列、以及可选的分区来初始化。
@@ -80,7 +79,7 @@
[<column num, type bigint>, <partition pt, type string>]
创建表
-======
+------
现在知道怎么创建表的Schema,创建一个表就很容易了。
@@ -92,7 +91,7 @@
其他还可以设置lifecycle等参数。
创建行记录Record
-==================
+------------------
Record表示表的一行记录,我们在 Table 对象上调用 new_record 就可以创建一个新的 Record。
@@ -113,7 +112,7 @@ Record表示表的一行记录,我们在 Table 对象上调用 new_record 就
>>> print(record['c_int_a', 'c_double_a']) # 通过多个字段取值
获取表数据
-==========
+----------
有若干种方法能够获取表数据。首先,如果只是查看每个表的开始的小于1万条数据,则可以使用 ``head`` 方法。
@@ -132,11 +131,8 @@ Record表示表的一行记录,我们在 Table 对象上调用 new_record 就
>>> for record in reader[5:10] # 可以执行多次,直到将count数量的record读完,这里可以改造成并行操作
>>> # 处理一条记录
-最后,可以使用Tunnel API来进行读取操作,``open_reader`` 操作其实也是对Tunnel API的封装。
-详细参考 :ref:`tunnel`。
-
向表写数据
-==========
+----------
类似于 ``open_reader``,table对象同样能执行 ``open_writer`` 来打开writer,并写数据。同样记住使用 **with表达式**
@@ -153,18 +149,16 @@ Record表示表的一行记录,我们在 Table 对象上调用 new_record 就
>>> writer.write(0, gen_records(block=0))
>>> writer.write(1, gen_records(block=1)) # 这里两个写操作可以多线程并行,各个block间是独立的
-同样,向表写数据也是对Tunnel API的封装,详细参考 :ref:`tunnel`。
-
删除表
-=======
+-------
.. code-block:: python
>>> odps.delete_table('my_table_name', if_exists=True) # 只有表存在时删除
>>> t.drop() # Table对象存在的时候可以直接执行drop函数
表分区
-=======
+-------
基本操作
~~~~~~~~~~~
@@ -212,7 +206,7 @@ Record表示表的一行记录,我们在 Table 对象上调用 new_record 就
.. _tunnel:
数据上传下载通道
-==============
+----------------
ODPS Tunnel是ODPS的数据通道,用户可以通过Tunnel向ODPS中上传或者下载数据。
@@ -0,0 +1,19 @@
+==========
+基本操作
+==========
+
+PyODPS 提供直接针对 ODPS 对象的基本操作接口,可通过符合 Python 习惯的编程方式操作 ODPS。
+
+我们会对这几部分来分别展开说明。
+
+.. toctree::
+ :maxdepth: 1
+
+ base-projects-zh
+ base-tables-zh
+ base-sql-zh
+ base-instances-zh
+ base-resources-zh
+ base-functions-zh
+ base-volume-int-zh
+ base-models-int-zh
Oops, something went wrong.

0 comments on commit 4906b01

Please sign in to comment.