Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark spark-RDDs上的有序并集_Apache Spark_Rdd - Fatal编程技术网

Apache spark spark-RDDs上的有序并集

Apache spark spark-RDDs上的有序并集,apache-spark,rdd,Apache Spark,Rdd,我正在尝试使用ApacheSpark对密钥记录对中的密钥进行排序。键的长度为10字节,值的长度约为90字节。换句话说,我正试图复制以前的排序基准数据库。我从文档中注意到的一件事是,它们按键行编号对排序,而不是按键记录对排序,可能是缓存/tlb友好的。我试图复制这种方法,但没有找到合适的解决方案。以下是我尝试过的: var keyValueRDD_1 = input.map(x => (x.substring(0, 10), x.substring(12, 13))) var keyValu

我正在尝试使用ApacheSpark对密钥记录对中的密钥进行排序。键的长度为10字节,值的长度约为90字节。换句话说,我正试图复制以前的排序基准数据库。我从文档中注意到的一件事是,它们按键行编号对排序,而不是按键记录对排序,可能是缓存/tlb友好的。我试图复制这种方法,但没有找到合适的解决方案。以下是我尝试过的:

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功能可用于实现这一点

任何提示或建议都非常有用。
谢谢union方法只是将两个RDD一个接一个地放在一起,除非它们具有相同的分区器。然后它加入分区

你想做的事是不可能的。

当一个RDD已排序(
keyValueRDD_1
)而另一个未排序的RDD具有相同的键(
keyValueRDD_2
)时,获得第二个RDD排序的唯一方法是对其进行排序

排序后的RDD的存在并不能帮助我们对第二个RDD进行排序

Databricks讨论了在执行器上局部发生的优化。在洗牌步骤之后,将对记录进行大致排序。每个分区现在覆盖一系列键,但分区是未排序的


现在您必须对每个分区进行本地排序,这就是前缀优化有助于缓存本地性的地方。

我明白了。是的,这是有道理的。因此,要么这个前缀优化已经内置在spark engine中,要么应该以这样一种方式对其进行编码,以便使用这个优化,这是我需要探索的。但是,是的,我明白了上述是不可能的,我倾向于这个结果。谢谢@Daniel。您是否尝试过
RDD.zip
和/或
RDD.zipWithIndex
?我对RDD-zip的理解是,它将按顺序压缩两个RDD元素的元素。因此,虽然一个RDD已订购,但另一个RDD未订购,这将导致@daniel指出的相同问题。谢谢