textChunkDS

Parent Previous Next


语法


textChunkDS(filename, chunkSize, [delimiter=','], [schema], [skipRows=0])


参数


filename是一个字符串,表示文件的绝对路径。


chunkSize是1到2048之间的整数,表示文件块的大小,单位是MB。


delimiter是表中列的分隔符。默认是逗号。


schema是一个表,用于指定各字段的数据类型。具体请参考loadText的schema参数。


skipRows是0到1024之间的整数,表示从文件头开始忽略的行数。它是一个可选参数。默认值为0。


详情


将文件划分为多个数据源,每个数据源的大小为chunkSize。如果需要将大文本文件加载到DolphinDB,可以使用textChunkDS函数将文本文件划分为多个小文件数据源,再通过mr函数写入到数据库中。和直接把大文本文件加载到数据库对比,这种方法占用的内存更少。


当DolphinDB加载数据文件时,会进行随机抽样,并基于样本决定每列的数据类型。这个方法不一定每次都能准确决定各列的数据类型。因此我们建议,在加载数据前,使用extractTextSchema函数查看DolphinDB识别每列的数据类型。如果DolphinDB识别的数据类型不符合预期,可以在schema的type列中指定数据类型。对于日期列或时间列,如果DolphinDB识别的数据类型不符合预期,不仅需要在schema的type列指定时间类型,还需要在format列中指定数据文件中日期或时间的格式(用字符串表示),如"MM/dd/yyyy"。如何表示日期和时间格式请参考日期和时间的调整及格式


例子


首先,通过以下脚本生成一个大约3.2G的文本文件:



n=30000000

workDir = "/home/DolphinDB"

if(!exists(workDir)) mkdir(workDir)

trades=table(rand(`IBM`MSFT`GM`C`FB`GOOG`V`F`XOM`AMZN`TSLA`PG`S,n) as sym, 2000.01.01+rand(365,n) as date, 10.0+rand(2.0,n) as price1, 100.0+rand(20.0,n) as price2, 1000.0+rand(200.0,n) as price3, 10000.0+rand(2000.0,n) as price4, 10000.0+rand(3000.0,n) as price5, 10000.0+rand(4000.0,n) as price6, rand(10,n) as qty1, rand(100,n) as qty2, rand(1000,n) as qty3, rand(10000,n) as qty4, rand(10000,n) as qty5, rand(10000,n) as qty6)

trades.saveText(workDir + "/trades.txt");



通过textChunkDS函数和mr函数将该文件导入到分布式数据库中:



db=database("dfs://db1",VALUE, `IBM`MSFT`GM`C`FB`GOOG`V`F`XOM`AMZN`TSLA`PG`S)

pt=db.createPartitionedTable(trades,`pt,`sym)

ds=textChunkDS(workDir + "/trades.txt",500)

mr(ds,append!{pt},,,false)



需要注意的是,这里每个小文件数据源可能包含相同分区的数据。DolphinDB不允许多个线程同时对相同分区进行写入,因此要将mr函数parallel参数设置为false,否则会抛出异常。