我想对使用apache spark的关键记录对的关键字进行排序。密钥长度为10个字节,值大约为90个字节。换句话说,我试图复制用于break the sorting record的排序基准Databricks。我从文档中注意到的一件事是,他们对键行号对进行了排序,而不是对关键记录对进行排序,以便可能对缓存/ tlb友好。我试图复制这种方法,但还没有找到合适的解决方案。这是我曾尝试:有序的火花RDD联盟
var keyValueRDD_1 = input.map(x => (x.substring(0, 10), x.substring(12, 13)))
var keyValueRDD_2 = input.map(x => (x.substring(0, 10), x.substring(14, 98))
var result = keyValueRDD_1.sortByKey(true, 1) // assume partitions = 1
var unionResult = result.union(keyValueRDD_2)
var finalResult = unionResult.foldByKey("")(_+_)
当我这样做的结果RDD和keyValueRDD_2 RDD工会和打印unionResultRDD,结果和keyValueRDD_2的输出没有被交织。换句话说,它看起来像unionResult RDD具有keyValueRDD_2内容和结果RDD内容。但是,当我执行将同一个键的值组合到单个键 - 值对中的foldByKey操作时,排序的顺序被破坏。我需要通过键操作进行折叠,以便将结果保存为原始键记录对。是否有可用于实现此功能的替代rdd函数?
任何提示或建议将是非常有用的。 谢谢
您是否试过'RDD.zip'和/或'RDD.zipWithIndex'? –
我对RDD zip的理解是,它会将两个RDD元素的元素明智地压缩。因此,当一个RDD被命令时,另一个RDD不会被排序,并且会导致@daniel指出的相同问题。谢谢。 –