gpt4 book ai didi

java - Java:将CSV文件转换为BINARY文件

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:23 25 4
gpt4 key购买 nike

这是我的数据库课上作业的问题之一。

我不明白为什么我们需要将csv文件转换为二进制文件。我认为这种方式将使搜索数据更加困难。谁能告诉我为什么我们需要这样做?是我的老师在愚弄我,还是将csv文件转换为二进制文件以便使用二进制搜索方法读取确实更好。 CSV文件的一行示例是

1|37|O|131251.81|1996-01-02|5-LOW|Clerk#000000951|0|nstructions sleep furiously among


这是我老师给我的任务。
我真的被任务C困住了。

总览
这项任务的目的是帮助您了解查询大型数据集所涉及的问题,这些数据集太大而无法完全容纳在内存中。为了调查这些问题,您将编写一个Java程序来读取CSV文件形式的数据表,并尽可能高效地对该表运行查询。提供了该程序的模板,您的代码应添加到Assignment1.java文件中。提供了一个驱动程序Driver.java,以便您可以测试您的程序。驱动程序将包含要由程序解释和执行的命令列表的文件作为输入。您将以指导方式实现程序的多个版本。在所有版本中,您都必须假定数据可能无法容纳在内存中,即您将无法将所有数据读取到内存中的Java数据结构中。

在所有版本中,命令的基本顺序都从加载数据开始,然后是一系列查询,即相等查询或范围查询。您可以假设输入正确且行为良好,即,此分配的目标不是错误处理。
任务A(15分)
在第一个版本中,您将实现最简单,最幼稚的解决方案。您的Java程序支持的命令列表必须包括以下内容:

naiveLoad filename:告诉程序以下查询将针对具有filename的csv文件
naiveSearchEq columnNum value:打印表中的行,其中列号columnNum中的值等于给定值。列号从一开始。
naiveSearchGtr columnNum value:打印表中的行,其中列号columnNum中的值大于给定值。

搜索命令应通过使用java类FileReader逐字符读取CSV文件来实现。您应该阅读FileReader,InputStreamReader等的Java文档。您必须使用FileReader类。
任务B(15分)
在第二个版本中,您将通过使用缓冲的IO改进第一个版本。使用BufferedReader类编写搜索命令的第二版。命名命令和相应的方法,如下所示:

naiveBufSearchEq columnNum value:打印表中的行,其中列号columnNum中的值等于给定值。列号从一开始。
naiveBufSearchGtr columnNum value:打印表中的行,其中列号columnNum中的值大于给定值。

任务C(50分)

在第三版中,您将采用不同的方法来解决该问题。首先,您将加载CSV数据文件并将其转换为BINARY文件。您必须将二进制文件命名为“ data.bin”。随后的查询将对二进制文件进行操作。您可以自由设计二进制文件的格式。命名命令和相应的方法,如下所示:

binaryLoad filename:将具有filename的csv文件转换为二进制文件。二进制文件的文件名应存储在程序中。
binarySearchEq columnNum value:打印表中的行,其中列号columnNum中的值等于给定值。列号从一开始。
binarySearchGtr columnNum value:打印表中的行,其中列号columnNum中的值大于给定值。

任务D(20分)
以程序的版本1、2和3的时间为基准,并比较运行时间。您应平均至少运行10次。在有关laulima的嵌入式提交中,回答以下问题:

Tabulate the average running time of the three versions of your program. Compare the running times of the three versions.
How are the timings of the different versions different?
Why are the timings of the different versions different ?
What did you learn in this assignment? What was most difficult/challenging (if any)?

最佳答案

给定更新的目标,我将遍历文件并在键上建立排序索引。索引将包含键值和每个记录与该键的偏移量。然后,我将编写一个包含索引和原始数据的新文件。如果允许使用两个文件,只需将索引作为一个单独的文件写入磁盘。

索引将比原始文件小得多。当您需要搜索时,仅读取索引部分(或文件),使用二进制搜索查找关键字,从索引条目中获取偏移量,然后使用该偏移量查找数据并仅读取该记录。

如果索引太大而无法放入RAM,则必须分两个步骤进行构建。


读取数据文件和写入索引文件(未排序),一次一次记录
使用磁盘排序实用程序对索引进行排序

关于java - Java:将CSV文件转换为BINARY文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14412436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com