云端数据科学
red-panda的Python项目详细描述
云计算上的数据科学。
警告
由于对f-string的高度依赖,此包仅适用于python>;=3.6。
功能
- 与s3和redshift之间的数据帧/文件。
- 在python中对redshift运行查询。
- 使用内置的redshift管理查询,例如检查正在运行的查询。
- 使用redshift实用程序函数可以轻松完成创建表等常见任务。
- 管理S3上的文件。
- 还提供cli(功能尚未完成)
安装
$ pip install red-panda
使用小熊猫
导入red-panda并创建RedPanda的实例。如果使用debugon(即rp = RedPanda(redshift_conf, s3_conf, debug=True))创建实例,red-panda将打印计划查询,而不是执行它们。
fromred_pandaimportRedPandaredshift_conf={'user':'awesome-developer','password':'strong-password','host':'awesome-domain.us-east-1.redshift.amazonaws.com','port':5432,'dbname':'awesome-db',}s3_conf={'aws_access_key_id':'your-aws-access-key-id','aws_secret_access_key':'your-aws-secret-access-key',# 'aws_session_token': 'temporary-token-if-you-have-one',}rp=RedPanda(redshift_conf,s3_conf)
将pandas数据帧作为新表加载到redshift中。
importpandasaspddf=pd.DataFrame(data={'col1':[1,2],'col2':[3,4]})s3_bucket='s3-bucket-name's3_path='parent-folder/child-folder'# optional, if you don't have any sub folderss3_file_name='test.csv'# optional, randomly generated if not providedrp.df_to_redshift(df,'test_table',bucket=s3_bucket,path=s3_path,append=False)
也可以:
- 将数据帧或平面文件上载到s3
- 从s3中删除文件
- 将s3数据加载到redshift中
- 将redshift查询结果卸载到s3
- 以数据帧的形式获取红移查询结果
- 在redshift上运行查询
- 将S3文件下载到本地
- 将内存中的s3文件作为数据帧读取
- 运行内置的redshift管理查询,例如获取运行查询信息
- 使用诸如create_table之类的实用程序函数在redshift中快速创建表
- 使用RedshiftUtils或S3Utils 分隔关注点
s3_key=s3_path+'/'+s3_file_name# DataFrame uploaded to S3rp.df_to_s3(df,s3_bucket,s3_key)# Delete a file on S3rp.delete_from_s3(s3_bucket,s3_key)# Upload a local file to S3pd.to_csv(df,'test_data.csv',index=False)rp.file_to_s3('test_data.csv',s3_bucket,s3_key)# Populate a Redshift table from S3 files# Use a dictionary for column definition, here we minimally define only data_typeredshift_column_definition={'col1':{data_type:'int'},'col2':{data_type:'int'},}rp.s3_to_redshift(s3_bucket,s3_key,'test_table',column_definition=redshift_column_definition)# Unload Redshift query result to S3sql='select * from test_table'rp.redshift_to_s3(sql,s3_bucket,s3_path+'/unload',prefix='unloadtest_')# Obtain Redshift query result as a DataFramedf=rp.redshift_to_df('select * from test_table')# Run queries on Redshiftrp.run_query('create table test_table_copy as select * from test_table')# Download S3 file to localrp.s3_to_file(s3_bucket,s3_key,'local_file_name.csv')# Read S3 file in memory as DataFramedf=rp.s3_to_df(s3_bucket,s3_key,delimiter=',')# csv file in this example# Since we are only going to use Redshift functionalities, we can just use RedshiftUtilsfromred_panda.red_pandaimportRedshiftUtilsru=RedshiftUtils(redshift_conf)# Run built-in Redshift admin queries, such as getting running query informationload_errors=ru.get_load_error(as_df=True)# Use utility functions such as create_table to quickly create tables in Redshiftru.create_table('test_table',redshift_column_definition,sortkey=['col2'],drop_first=True)
有关api文档,请访问https://red-panda.readthedocs.io/en/latest/。
待办事项
无特殊顺序:
- 支持更多数据格式复制。当前仅支持分隔文件。
- 支持S3到DF的更多数据格式。当前仅支持分隔文件。
- 改进测试和文档。
- 从dataframe到redshift推断数据类型的更好方法。
- 探索如何使用S3 Transfer Manager'supload_fileobj对df_to_s3使用自动多部分上载。
- 除了从s3源路径复制之外,还添加从s3清单文件复制。
- 构建cli来管理python之外的数据。
进行中:
- 支持度阿里云,GCP
- emr从配置文件创建群集
- 利用红移切片进行并行处理。分割文件进行复制。
完成时间:
- 从redshift卸载到s3。
- 当用户确实有隐式列作为数据帧中的索引时处理。当前索引将自动删除。
- 为上传到s3的文件添加加密选项。通过添加对s3 put_object/upload_file方法的所有kwargs的支持。