ホームページ >バックエンド開発 >Golang >golang で大きなファイルを効率的に処理する方法

golang で大きなファイルを効率的に処理する方法

藏色散人
藏色散人転載
2021-05-12 11:52:442350ブラウズ

次のチュートリアル コラムでは、golang による大きなファイルの効率的な処理_Pandas を使用して大きなファイルを分割して処理する方法を紹介します。 Pandas を使用して大きなファイルをチャンクで処理する問題: 今日、Kuaishou のユーザー データを処理しているときに、約 600M の txt テキストに遭遇しました。sublime で開くとクラッシュしました。 pandas. read_table() で読み取るのに 2 分近くかかりましたが、最終的に開いてみると、約 3,000 万行のデータが見つかりました。まだオープンしたばかりなので、どれだけ大変かわかりません。

解決策: ドキュメントを調べました。ファイルを読み取るこのタイプの関数には 2 つのパラメーターがあります:

chunksize

iterator

原理は次のとおりです。ファイルデータは一度にメモリに読み込まれるのではなく、複数回読み込まれます。 1. ファイルをチャンク単位で読み取るためにチャンクサイズを指定する

read_csv と read_table には、チャンク サイズ (毎回読み取る行数) を指定し、反復可能な TextFileReader オブジェクトを返す chunksize パラメーターがあります。

table=pd.read_table(path+'kuaishou.txt',sep='t',chunksize=1000000)
for df in table:
    对df处理
    #如df.drop(columns=['page','video_id'],axis=1,inplace=True)
    #print(type(df),df.shape)打印看一下信息

ここでファイルを再度分割し、個別の処理のためにいくつかのサブファイルに分割しました (はい、to_csv にはチャンクサイズ パラメーターもあります)

2. iterator=True

を指定します。

iterator=True は TextFileReader オブジェクトも返します。

reader = pd.read_table('tmp.sv', sep='t', iterator=True)
df=reader.get_chunk(10000)
#通过get_chunk(size),返回一个size行的块
#接着同样可以对df处理

この側面での pandas ドキュメントの内容を見てみましょう。

以上がgolang で大きなファイルを効率的に処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。