如何从巨大的文本中随机抽样少量行

现有文本huge.txt,前 5 行内容如下:

f1

f2

yewhhgfifsbplrxankqazzewzkhfxjetiprfvyinchmdventatkry

lwxazkmczmpcluechdtfgwapgvyzfxqczcuvadkfqrcciptmpo

viqxbdjjzkdcytdnjiuexottvgdjkafhykbotjsupyuybvgycqhfsdlypuftbezga

mmoermrlbovwmfnxgctizucfccatwlvugnqvikhbgaqvamwbzqluwavgcjtonutairrafrpywtwtpocgltmfrxz

plhdyslghehlptlsczizhjbtcqwasvspjqyeifsnqagqovvdukxftsp

tlisnnguudbqgrupqpoqjfshldpuwjdkfeizhkfwsvmdspswusmclhqzzxaumvwrerbsl

bltnilcncwgnsyxeosdtytvpdbxuiwukdqpgvvbihoqvvmhogmffzpivuysbhgitfqxptyuofsukmz

ajojwbcfptahjetpnmkbsfrblubvvjxyestplybzpxxwsrppgteoreckkscrsu

该文本有200GB,现需要从中随机抽样 1 万行数据

借助集算器可以很方便地完成件事。可去润乾网站载集算器职场版,运行需要一个授,免版本就用。

1.     在集算器中编写脚本sample.dfx:


A

1

=file("huge.txt")

2

=A1.cursor@t()

3

=A2.fetch(100).(len(f1)+len(f2)).avg()

4

=A1.size()/A3

5

=10000.(rand(A4))

6

=A5.(A1.cursor@t(;~:A4).fetch(1)).conj()

A1   打开文件 huge.txt

A2   对文件建立游标

A3   取前 100 条记录,计算记录的平均长度(字节数)

A4   估算文件行数,文件总字节数 / 记录平均字节数

A5   生成 1 万个随机行数

A6   将文本文件拆成 n 段,n 为估算出的行数,随机选 1 万段,取每段的第一行

2.     行脚本,A6 是需要计算出的结果

本题解答的特点在于:做法较简单,抽样结果较粗略。因为总段数是估算的,估算值若大于实际行数,最终样本结果可能略小于1 万。