我遇到了一個問題,即需要讀取非常大的文件,然後打印每個塊的分析結果。不是最終的完整列表。如何在Elixir流中的每個塊中寫入文件
到目前爲止,我可以得到一個地圖集的uniq的結果,但我無法弄清楚如何使用這種方法來獲得唯一的文件名
def new_file_name do
hex = :crypto.hash(:md5, Integer.to_string(:os.system_time(:millisecond)))
|> Base.encode16
end
於是寫信給每chunk_size
文件我所擁有的最好的是這給了我一個具有塊大小獨特結果的MapSets列表。這是一個MapSets列表,它可能最終導致內存太大而無法容納。
def parse(file_path, chunk_size) do
file_path
|> File.stream!(read_ahead: chunk_size)
|> Stream.drop(1) # remove header
|> Stream.map(&"#{&1}\") # Prepare to be written as a csv
|> Stream.chunk(chunk_size, chunk_size, []) # break up into chunks
|> method # method to write per chunk to file.
end
我有什麼之前是
|> Stream.map(&MapSet.new(&1)) # Create MapSet of unique values from each chunk
,但我似乎無法找到任何的例子寫一個地圖集到文件。
直到調用其中一個'Enum'函數或'Stream.run/1',纔會執行計算。所以可能你想完成使用'Enum.map'而不是'Stream.map' – GavinBrelstaff
從文檔https://hexdocs.pm/elixir/MapSet.html看起來你唯一能做的就是將它轉換成到一個列表(使用'Mapset.to_list(map_set)'),然後寫入文件。我沒有自己嘗試過 - 所以如果你想在以後讀回數據,可能需要特別注意。 – GavinBrelstaff
MapSet包含什麼?你想在新文件中保留行嗎?對於你放棄一個你想要存儲在MapSet中的數據的例子,這會是一個問題嗎?這將有助於理解問題並提出建議方法 –