为了按主题划分RDF三元组,我使用主题的String.hashCode()并将三元组放在相应的分区中。目标是能够处理内存中的分区文件(可能无法处理大文件)。
现在为了拥有有限数量的分区,我会执行以下操作。假设我们想要一个大的RDF文件中有10个分区:
String subject;
partitionFileName = subject.hashCode / (Integer.MAX_VALUE/10)
因此,具有相同主题的所有三元组将在一个分区中,并且总体上我们将具有10个分区。
现在的问题是,当三元组具有不同的分布时,它可能导致非常大或非常小的分区,这是不希望的。
有人有任何建议吗?
提前谢谢。
答案 0 :(得分:3)
算法:
优点:
缺点:
如果您不关心在同一个分区中保留同一主题三元组,那么只需创建十个桶并将其填充为循环。 O(n)并尽可能平衡。
答案 1 :(得分:0)
您只需使用模数分割分区:
subject.hashCode() % 10
将在十个分区中或多或少地均匀分割。