cookbook: rapidis cookbook
1誊垢、 部署:
? ? ? rapidis鏡像下載:?rapidis官網(wǎng)
2喜命、cudf dataframe 與pandas dataframe 區(qū)別
? ? ? 1)pandas在對(duì)集合做sum,prod等操作時(shí)會(huì)忽略空置配阵。 但是cudf不會(huì),所以在做歸并操作之前一定要確保沒有空值虏杰。
? ? ? ? ? ? df['col'].fillna(0)
? ? ? 2)cudf不支持高級(jí)分組操作怕吴,比如,groupby(key).cumprod(), groupby(key).cumsum(), groupby(key).prod() 需要通過cuda實(shí)現(xiàn)該計(jì)算過程停撞。
? ? ? ? ? 例: groupby(key).prod() 實(shí)現(xiàn)過程
? ? ? ? ? 原理:對(duì)每一個(gè)分組進(jìn)行依次相乘瓷蛙,除最后一行外,其他行都賦值為0. 最后分組相加得到最后? ? 聚合結(jié)果
? ? ? ? ? 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操作速挑。會(huì)一直跑不出結(jié)果谤牡。原因未知副硅。
? ? ? (4)、cudf .loc支持不是特別好翅萤。pandas和cudf類型轉(zhuǎn)換之后 index會(huì)有各種問題。
? ? ? ? ? ? ? ? 當(dāng)使用布爾值.loc時(shí),需要做特殊處理雄妥,當(dāng)df只有一行時(shí)索抓,寫法需要有不同。
? ? ? ? ? ? ? ? if len(df.loc[row,col]) == 1:
? ? ? ? ? ? ? ? ? ? ? df.loc[row][col] += 1
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? ? df.loc[row,col] += 1