使用不同格式(csv,json,avro)将数据加载到pd.DataFrame的最快方法

我们正在加载从google bigquery到的大量数据pandas dataframe(直接作为消费pandas,也作为消费xgbMatrix)。


BQ导出格式CSV,JSON并且AVRO,我们的数据有日期,整数,浮点数和字符串,并且通常是“宽”(多列)。我们的第一种方法是将数据导入为CSV,但是解析时间很长:


(32 GB,126 files,CSV) -> 25 min


解析代码:


def load_table_files_to_pandas(all_files, 

                           table_ref):


# load files to pandas

dict_dtype = {}

date_cols = []


client =  bigquery.Client() # create a bq client

table = client.get_table(table_ref)


for field in table.schema:

    pd_dtypes = {'string':'object',

                 'date':'object',

                 'float':'float64',

                 'integer':'float64'

                 }

    dict_dtype[field.name] = pd_dtypes[field.field_type.lower()]

    if field.field_type.lower()== 'date':

        date_cols.append(field.name)


print('start reading data')    

df_from_each_file = []

for f in all_files:

    # looping over files

    df_from_each_file.append(pd.read_csv(f, 

                                         dtype = dict_dtype, 

                                         parse_dates = date_cols))


    print('memory in use = {}'.format(psutil.virtual_memory().percent))


df = pd.concat(df_from_each_file, ignore_index=True)

print('end reading data')

return df

哪种格式解析速度更快pandas?[Avro,CSV,JSON]?也许有第三个人没有被考虑?


另外, 我们还尝试dask|csv直接从存储和本地磁盘进行尝试,但是解析时间几乎相同。


蛊毒传说
浏览 211回答 2
2回答

摇曳的蔷薇

当处理如此大的文件时,我将使用Parquet格式的Spark。这样,您可以扩大读取和计算的范围。熊猫不是为如此大的文件制作的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python