Pyhusky Operators
PyHusky支持三种运算符: Load, Transformation, 和 Action.
通畅情况下,一个PyHusky程序首先使用Load运算符.
PyHusky 采用lazy evaluation技术, 所有 Loads 和 Transformations 的运算将会被推迟,以避免不必要的计算和提高性能。 Action 操作才会真正触发计算。
因此一个应用程序需确保以 Load 操作开始,并以 Action 结束。
Transformations 分为两类: simple transformations 和 shuffle transformations。Simple transformations不会导致网络传输,但shuffle transformations会.
Loads
以下为PyHusky支持的 Load 操作符。PyHusky应用程序需要包含 env
包以便使用这些运算。
-
load(url)
:从HDFS中加载数据,使用LineInputFormat(每行成为PyHuskyList的一个元素),返回一个PyhuskyList。 -
parallelize(list)
: 将一个Python list划分到不同机器上,返回PyHuskyList。
Transformations
以下为PyHusly支持的 Transformation 操作符。
Simple transformations
-
map(func)
:对已有的PyHuskylist的每一个元素进行函数操作,并返回一个新的PyHuskyList。 -
flat_map(func)
:和map 函数类似,但每个原元素可以被映射成零个或多个输出元素(func应该返回一个list而不是一个元素)。 -
filter(func)
:返回一个经过func筛选后的新的PyHuskyList。 -
concat(pyhuskylist)
:拼接两个PyHuskyList, 并返回一个新的PyHuskyList。 -
map_partition(func)
:对于每个PyHuskyList数据分片(一个python列表)的所有元素执行func函数,并返回新的PyHuskyList。
Shuffle transformations
-
distinct()
:返回一个不含重复元素的PyHuskyList。 -
reduce_by_key(func)
:对由(k, v)对组成的PyHuskyList按照k分组,对每个分组执行func函数聚集v(如求和)。 -
group_by_key()
:接收由(k, v)对组成的PyHuskyList,按照k进行分组,返回由(k, [v1...])组成的PyHuskyList -
count_by_key()
:接收由(k, v)对组成的PyHuskyList,按照k进行分组,计数每个k有多少个对,返回由(k, num)对组成的PyHuskyList -
difference(other_pyhuskylist)
:返回一个不包含other_pyhuskylist元素的新PyHuskyList。
Actions
以下为PyHusly支持的 Action 操作符。
-
reduce(func)
:按照func聚集函数聚集所有PyHuskyList中的元素,返回一个最终值。 -
cache()
:缓存所有PyHuskyList中的元素。 -
uncache()
:取消对PyHuskyList中元素的缓存。 -
write_to_hdfs(url)
:将PyHuskyList中的全部元素写出到HDFS的url目录里面。 -
count()
:返回一个PyHuskyList包含的元素个数。 -
collect()
:收集各个PyHuskyList分片的数据,返回到前端。 -
empty()
:返回true如果该PyHuskyList不含任何元素,否则返回false。 -
topk(k, key=None, reverse=False)
:返回PyHuskyList的前k个元素。 -
output()
:输出PyHuskyList中的全部元素到前端控制台。 -
foreach(func)
:对PyHuskyList中的每一个元素实施func函数操作
待开发的操作符...
sample(N)
,take(N)
,union
,intersect
,join
,cartesian
...
Husky应用库
以下为PyHusky支持的各类应用。
PageRank
-
from_edgelist(pyhuskylist)
:接收由(src, dst)对组成的PyHuskyList创建一个图。 -
pagerank(num_iters)
:计算一个图进行PageRank的计算,迭代num_iters次。 -
topk(k)
:得到一个图top-k的PageRank值
例子:
pr = pagerank.from_edgelist(edgelist) pr.compute(iter=10) pr.topk(5)