ufo22940268
V2EX  ›  Hadoop

关于 spark 中的 partitions

  •  
  •   ufo22940268 · Nov 17, 2017 · 3412 views
    This topic created in 3100 days ago, the information mentioned may be changed or developed.

    环境

    • hive
    • spark
    • hadoop

    问题

    In [7]: spark.sql('select time from userlogs where date = "2017-10-27"').rdd.getNumPartitions()
    Out[7]: 164
    
    In [8]: spark.sql('select time from userlogs where date = "2017-10-27" limit 100').rdd.getNumPartitions()
    Out[8]: 1
    

    为什么不加 limit 的 partition 是 164, 为什么加了 limit 的 partition 是 1. 我很费解.

    还有就是 spark-sql 进行查询的时候的 partition 的数量是由什么决定的

    4 replies    2017-11-17 11:39:46 +08:00
    imherer
        1
    imherer  
       Nov 17, 2017
    我还以为是大疆😂
    ihainan
        2
    ihainan  
       Nov 17, 2017
    Spark Core 熟悉点,Spark SQL 不熟就只能飘过了……
    yunkchen
        3
    yunkchen  
       Nov 17, 2017   ❤️ 1
    加了 limit,spark 就会尽量遍历少的 partition 来查找结果,从而尽快给出查询结果;
    一次操作生成一个 RDD,而一个 RDD 可以分为多个 partitions,从而分布在多台机器上。
    kex0916
        4
    kex0916  
       Nov 17, 2017   ❤️ 1
    对于 limit 操作,spark 的处理方式是对 RDD 的每个分区 take(limit),然后将每个分区 take 后的 RDD 转换成 SinglePartition 的 ShuffledRowRDD,然后再对每个分区 take(limit),由于只有一个分区,因此结果就是最终的 limit 结果。
    因此就明白为啥 limit 后 RDD 分区数量为 1 了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1100 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 18:22 · PVG 02:22 · LAX 11:22 · JFK 14:22
    ♥ Do have faith in what you're doing.