Python 如何读取csv并使用dask处理行?

Python 如何读取csv并使用dask处理行?,python,python-3.x,pandas,dask,kyotocabinet,Python,Python 3.x,Pandas,Dask,Kyotocabinet,我想读取一个28Gb的csv文件并打印内容。但是,我的代码: import json import sys from datetime import datetime from hashlib import md5 import dask.dataframe as dd import dask.multiprocessing import pandas as pd from kyotocabinet import * class IndexInKyoto: def hash_s

我想读取一个28Gb的csv文件并打印内容。但是,我的代码:

import json
import sys
from datetime import datetime
from hashlib import md5

import dask.dataframe as dd
import dask.multiprocessing
import pandas as pd

from kyotocabinet import *


class IndexInKyoto:

    def hash_string(self, string):
        return md5(string.encode('utf-8')).hexdigest()

    def dbproc(self, db):
        db[self.hash_string(self.row)] = self.row

    def index_row(self, row):
        self.row = row
        DB.process(self.dbproc, "index.kch")

start_time = datetime.utcnow()
row_counter = 0
ob = IndexInKyoto()
df = dd.read_csv("/Users/aviralsrivastava/dev/levelsdb-learning/10gb.csv", blocksize=1000000)
df = df.compute(scheduler='processes')     # convert to pandas
df = df.to_dict(orient='records')
for row in df:
    ob.index_row(row)
print("Total time:")
print(datetime.utcnow-start_time)
它不起作用。当我运行命令
htop
时,我可以看到dask正在运行,但没有任何输出。也没有创建任何index.kch文件。 我在没有使用dask的情况下大声说同样的话,它运行得很好;我使用的是熊猫流api(
chunksize
),但速度太慢,因此我想使用dask

df = df.compute(scheduler='processes')     # convert to pandas
不要这样做

您在单独的进程中加载片段,然后在主进程中将所有要缝合的数据传输到单个数据帧中。这只会增加处理开销,并在内存中创建数据副本

如果您只想(出于某种原因)将每一行打印到控制台,那么您就可以很好地使用Pandas streaming CSV reader(
pd.read\u CSV(chunksize=…)
)。您可以使用Dask的分块来运行它,如果您在读取数据的工人中进行打印,可能会得到一个加速:

df = dd.read_csv(..)

# function to apply to each sub-dataframe
@dask.delayed
def print_a_block(d):
    for row in df:
        print(row)

dask.compute(*[print_a_block(d) for d in df.to_delayed()])

请注意,
对于df中的行
实际上可以获取列,可能您想要ItError,或者您实际上想要以某种方式处理您的数据。

我想要读取每一行并获取,并且希望能够在给定索引的情况下提取特定列的值。例如:mdurant,24岁,男性aviral,22岁,男性,我想读上面两行,并删去第一(0)列。我的目标不是将行输出到控制台,而是将它们写入Kyotocabinet。有道理吗?对不起,没有,我不明白。你应该改变你的问题以反映你真正想要的。在我的回答中,您可以将任何您喜欢的处理放入延迟函数中。我的回答仍然有效,请尝试适应您的情况。当然可以,但您能否回答我如何获得我在前面问题中所问的实际行?我想看确切的一行,但是
itertuples
iterrows
也给我额外的东西。现在你问熊猫具体的东西,你应该看他们的文档。