如何使用 Dask 分多个阶段处理一个(或多个)文件
How to use Dask to process a file (or files) in multiple stages
我正在分 3 个阶段处理内存中的大型文本文件(目前未使用 pandas
/dataframes
)
这需要一个原始数据文本文件并分四个阶段对其进行处理。
阶段 1 处理 raw.txt
并踢出 stage1.txt
第 2 阶段处理 stage1.txt
并踢出 stage2.txt
阶段 3 处理 stage2.txt
并踢出 results.txt
我应该如何设置 Dask 脚本以在本地处理此问题?
除此之外,您如何设置它以使用 raw.txt
的倍数。
(即 raw1、raw2、raw3)
目前,每个阶段方法 return 除了将下一个文件写入下一个方法知道的特定文件位置外,什么都不做。
def stage_1():
outputFile=r"C:\Data\Processed\stage_1.txt"
inputFile=r"C:\Data\RawData\rawData.txt"
f1 = open(outputFile,"w+")
f2 = open(inputFile,'r')
#Process input file f2
#Write results to f1
f2.close()
f1.close()
if __name__ == "__main__":
stage_1()
stage_2()
stage_3()
我怀疑您会 运行 遇到一些问题。
函数纯度
Dask 通常假设函数是 pure 而不是依赖于副作用。如果你想使用 Dask,那么我建议你更改你的函数,以便它们 return 数据而不是生成文件。
作为一个 hacky 解决方法,您可以在函数之间传递文件名。
无并行
您描述的工作流程没有内在的并行性。你可以让 运行 你的函数 dask,但它只会 运行 它们一个接一个地执行。您需要考虑如何稍微打破计算,以便有多个函数调用可以 运行 并行。 Dask 不会为你做这些思考。
我正在分 3 个阶段处理内存中的大型文本文件(目前未使用 pandas
/dataframes
)
这需要一个原始数据文本文件并分四个阶段对其进行处理。
阶段 1 处理
raw.txt
并踢出stage1.txt
第 2 阶段处理
stage1.txt
并踢出stage2.txt
阶段 3 处理
stage2.txt
并踢出results.txt
我应该如何设置 Dask 脚本以在本地处理此问题?
除此之外,您如何设置它以使用 raw.txt
的倍数。
(即 raw1、raw2、raw3)
目前,每个阶段方法 return 除了将下一个文件写入下一个方法知道的特定文件位置外,什么都不做。
def stage_1():
outputFile=r"C:\Data\Processed\stage_1.txt"
inputFile=r"C:\Data\RawData\rawData.txt"
f1 = open(outputFile,"w+")
f2 = open(inputFile,'r')
#Process input file f2
#Write results to f1
f2.close()
f1.close()
if __name__ == "__main__":
stage_1()
stage_2()
stage_3()
我怀疑您会 运行 遇到一些问题。
函数纯度
Dask 通常假设函数是 pure 而不是依赖于副作用。如果你想使用 Dask,那么我建议你更改你的函数,以便它们 return 数据而不是生成文件。
作为一个 hacky 解决方法,您可以在函数之间传递文件名。
无并行
您描述的工作流程没有内在的并行性。你可以让 运行 你的函数 dask,但它只会 运行 它们一个接一个地执行。您需要考虑如何稍微打破计算,以便有多个函数调用可以 运行 并行。 Dask 不会为你做这些思考。