cookbook: rapidis cookbook
1、 部署:
rapidis镜像下载: rapidis官网
2、cudf dataframe 与pandas dataframe 区别
1)pandas在对集合做sum,prod等操作时会忽略空置。 但是cudf不会,所以在做归并操作之前一定要确保没有空值。
df['col'].fillna(0)
2)cudf不支持高级分组操作,比如,groupby(key).cumprod(), groupby(key).cumsum(), groupby(key).prod() 需要通过cuda实现该计算过程。
例: groupby(key).prod() 实现过程
原理:对每一个分组进行依次相乘,除最后一行外,其他行都赋值为0. 最后分组相加得到最后 聚合结果
grouped = df.groupby(key, method='cudf')
def prod(col1,col2):
prod_size = len(col1)
for i in range(cuda.threadIdx.x,len(col1),cuda.blockDim.x):
if i < prod_size -1:
col1[i] = 0.0
col2[i] = 0.0
else:
col1_begin = 1.0
col2_begin = 1.0
for j in range(i - prod_size+1, i+1):
col1_begin *= col1[j]
col2_begin *= col2[j]
col1[i] = col1_begin
col2[i] = col2_begin
df_result = grouped.apply_grouped(prod,
incols = ['col1','col2'],
outcols = {
'col1':np.float64,
'col2':np.float64
}
)
df_result = df_result.groupby(key).sum()
(3)、最好不要在cudf中做append操作。会一直跑不出结果。原因未知。
(4)、cudf .loc支持不是特别好。pandas和cudf类型转换之后 index会有各种问题。
当使用布尔值.loc时,需要做特殊处理,当df只有一行时,写法需要有不同。
if len(df.loc[row,col]) == 1:
df.loc[row][col] += 1
else:
df.loc[row,col] += 1