Csv 在非常大的数据集上执行联接

Csv 在非常大的数据集上执行联接,csv,join,bigdata,Csv,Join,Bigdata,我已经收到几个CSV文件,我需要合并成一个文件,所有这些文件都有一个公共密钥,我可以用来加入它们。不幸的是,这些文件的大小都大约为5GB(几百万行,大约20-100+列),因此将它们加载到内存中并对每个文件执行联接是不可行的,但我知道我不必担心它们之间存在的列冲突 我尝试为每个ID对应的文件创建一个行索引,这样我就可以在不使用太多内存的情况下计算结果,但当然,当实际尝试查找每一行时,这会随着时间的推移而变慢,从该行中提取剩余的CSV数据,将其连接到进行中的数据,然后写入文件。即使在SSD上,针对

我已经收到几个CSV文件,我需要合并成一个文件,所有这些文件都有一个公共密钥,我可以用来加入它们。不幸的是,这些文件的大小都大约为5GB(几百万行,大约20-100+列),因此将它们加载到内存中并对每个文件执行联接是不可行的,但我知道我不必担心它们之间存在的列冲突

我尝试为每个ID对应的文件创建一个行索引,这样我就可以在不使用太多内存的情况下计算结果,但当然,当实际尝试查找每一行时,这会随着时间的推移而变慢,从该行中提取剩余的CSV数据,将其连接到进行中的数据,然后写入文件。即使在SSD上,针对每个文件中的数百万行进行处理也是不可行的

我还尝试在内存中加载一些较小的集合,并对它们运行parallel.foreach,以匹配必要的数据以转储回临时合并文件。虽然这比上一种方法快,但我没有足够的内存来处理较大的文件

理想情况下,我只想对最大的文件执行完全左连接,然后对随后的每个较小的文件执行完全左连接,以便所有文件都合并

否则我如何着手解决这个问题?我在这个系统上有24 gb的内存可供使用,还有6个内核可供使用

虽然这可能只是在关系数据库中加载并从那里进行连接的一个问题,但我想在走这条路之前,我应该先联系一下,看看是否有任何想法可以从我的本地系统中解决这个问题


谢谢

首先想到的是关系数据库,而且可能是最简单的,但除此之外

构建哈希表,将密钥映射到文件偏移量。在加入时按需分析行。如果您的键空间仍然太大,无法容纳可用的地址空间,您也可以将其放入文件中。这正是数据库索引所要做的(尽管可能使用b-树)


您还可以根据文件的键对文件进行预排序并进行合并联接。

首先想到的是关系数据库,这可能是最简单的,但除此之外

构建哈希表,将密钥映射到文件偏移量。在加入时按需分析行。如果您的键空间仍然太大,无法容纳可用的地址空间,您也可以将其放入文件中。这正是数据库索引所要做的(尽管可能使用b-树)


您还可以根据文件的键对文件进行预排序并进行合并联接。

我不确定您是否在处理数据。但是如果只是结合csv,你可以试试这个。。。

我不确定您是否在操纵数据。但是如果只是结合csv,你可以试试这个。。。

好消息是,“几个”5GB文件并不是一个巨大的数据量。我知道这是相对的,但是你描述你的系统的方式…我仍然认为这没什么大不了的。如果不需要加入,可以使用Perl或其他一些命令行工具

每个文件中的列名都是已知的吗?你关心列名吗

我的第一个想法:

  • 启动AmazonWebServices(AWS)弹性MapReduce(EMR)实例(即使是很小的实例也可以)
  • 上传这些文件
  • 将文件导入配置单元(无论是否为托管文件)
  • 在蜂巢中执行连接
  • 您可以在几分钟内启动一个实例,并在一个小时左右完成工作,具体取决于您对材质的舒适程度

    我不为亚马逊工作,甚至不能在白天的工作中使用他们的东西,但我在研究生院经常使用它们。当你需要自己的大数据集群时,它就像一个冠军。再说一次,这不是“大数据(R)”,但Hive将在短时间内为您解决这一问题

    本文并不完全满足您的需要(它从S3复制数据);但是,它将帮助您理解表的创建等。

    编辑: 以下是EMR概述的链接:

    好消息是,“几个”5GB文件并不是一个巨大的数据量。我知道这是相对的,但是你描述你的系统的方式…我仍然认为这没什么大不了的。如果不需要加入,可以使用Perl或其他一些命令行工具

    每个文件中的列名都是已知的吗?你关心列名吗

    我的第一个想法:

  • 启动AmazonWebServices(AWS)弹性MapReduce(EMR)实例(即使是很小的实例也可以)
  • 上传这些文件
  • 将文件导入配置单元(无论是否为托管文件)
  • 在蜂巢中执行连接
  • 您可以在几分钟内启动一个实例,并在一个小时左右完成工作,具体取决于您对材质的舒适程度

    我不为亚马逊工作,甚至不能在白天的工作中使用他们的东西,但我在研究生院经常使用它们。当你需要自己的大数据集群时,它就像一个冠军。再说一次,这不是“大数据(R)”,但Hive将在短时间内为您解决这一问题

    本文并不完全满足您的需要(它从S3复制数据);但是,它将帮助您理解表的创建等。

    编辑: 以下是EMR概述的链接:

    不幸的是,我需要根据密钥(谢天谢地,在所有文件的第一列中)连接它,所以我不能简单地连接所有内容,但谢谢!不幸的是,我需要根据密钥连接它(谢天谢地,它位于所有文件的第一列),所以我不能简单地连接所有内容,但谢谢!