Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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
Hadoop 在spark连接中,表顺序像猪一样重要吗?_Hadoop_Apache Spark_Apache Pig_Bigdata - Fatal编程技术网

Hadoop 在spark连接中,表顺序像猪一样重要吗?

Hadoop 在spark连接中,表顺序像猪一样重要吗?,hadoop,apache-spark,apache-pig,bigdata,Hadoop,Apache Spark,Apache Pig,Bigdata,有关 在pig中执行常规联接时,联接中的最后一个表不会被带到内存中,而是通过流传输,因此,从性能角度来看,如果a每个键的基数较小,B的基数较大,则执行联接a,B要比按B联接a好得多(避免溢出和OOM) spark中是否有类似的概念?我没有看到任何这样的建议,不知道怎么可能?在我看来,该实现与pig中的实现几乎相同: 还是我遗漏了什么?这没有什么区别,在spark中,RDD只有在缓存时才会被带到内存中。因此,在spark中,为了达到相同的效果,您可以缓存较小的RDD。在spark中可以做的另一件事

有关

在pig中执行常规联接时,联接中的最后一个表不会被带到内存中,而是通过流传输,因此,从性能角度来看,如果a每个键的基数较小,B的基数较大,则执行
联接a,B
要比
按B联接a
好得多(避免溢出和OOM)

spark中是否有类似的概念?我没有看到任何这样的建议,不知道怎么可能?在我看来,该实现与pig中的实现几乎相同:


还是我遗漏了什么?

这没有什么区别,在spark中,RDD只有在缓存时才会被带到内存中。因此,在spark中,为了达到相同的效果,您可以缓存较小的RDD。在spark中可以做的另一件事,我不确定pig是否会做,就是如果所有加入的RDD都有相同的分区器,则无需进行洗牌。

好,但假设我们不缓存任何RDD。我假设spark在两个RDD之间做了一种嵌套循环。如果A每个连接键有1M条记录,而B每个连接键只有3条记录,但两者都是巨大的。如果外部(左)表是A,则每个连接键都将导致磁盘溢出。。。对吗?@ihadanny如果你看[source]()一切都是一个迭代器,所以没有什么东西需要加载到内存中,当迭代器耗尽时,它会从头开始,也就是说,for循环看起来会将输出留在内存中