Cudf 与pandas df 使用中的不同

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。