代码之家  ›  专栏  ›  技术社区  ›  Madhusoodan P

对分组后的分区数的混淆[重复]

  •  0
  • Madhusoodan P  · 技术社区  · 7 年前

    是否有任何方法可以获取数据帧的当前分区数? 我检查了DataFrame javadoc(spark 1.6),但没有找到方法,或者我只是错过了它? (对于JavaRDD,有一个getNumPartitions()方法。)

    0 回复  |  直到 6 年前
        1
  •  120
  •   user4601931    7 年前

    你需要打电话 getNumPartitions() 在数据帧的底层RDD上,例如。, df.rdd.getNumPartitions() df.rdd.getNumPartitions .

        2
  •  15
  •   Ram Ghadiyaram    6 年前

    dataframe.rdd.partitions.size 是除了 df.rdd.getNumPartitions() df.rdd.length .

    让我用完整的例子来解释这个。。。

    val x = (1 to 10).toList
    val numberDF = x.toDF(“number”)
    numberDF.rdd.partitions.size // => 4
    

    为了证明我们有多少个分区。。。将该数据帧另存为csv

    numberDF.write.csv(“/Users/Ram.Ghadiyaram/output/numbers”)
    

    下面是数据在不同分区上的分隔方式。

    Partition 00000: 1, 2
    Partition 00001: 3, 4, 5
    Partition 00002: 6, 7
    Partition 00003: 8, 9, 10
    

    更新:

    在上述情况下,分区数为4

    取决于你正在执行的案件。自从使用local[4]以来,我得到了4个分区。

    长答案:

    4个 分区。

    val spark = SparkSession.builder()
        .appName(this.getClass.getName)
        .config("spark.master", "local[4]").getOrCreate()
    

    例子: spark-shell --master yarn

    scala> val x = (1 to 10).toList
    x: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    
    
    scala> val numberDF = x.toDF("number")
    numberDF: org.apache.spark.sql.DataFrame = [number: int]
    
    scala> numberDF.rdd.partitions.size
    res0: Int = 2
    
    • default parllelism of spark
    • 基于hashpartitioner的spark将决定要分发多少个分区。如果你在跑步 --master local 基于你的 Runtime.getRuntime.availableProcessors() local[Runtime.getRuntime.availableProcessors()] 分区的数目。如果可用的处理器数量是12(即。 local[Runtime.getRuntime.availableProcessors()]) 如果列表是1到10,那么只会创建10个分区。

    注:

    方法 local[*] s"local[${Runtime.getRuntime.availableProcessors()}]") 但是在这里面 箱子里只有10个号码,所以最多只能装10个

    记住这些要点,我建议你自己试试

        3
  •  7
  •   Kartoch    8 年前

    DF.rdd.partitions.length
    
        4
  •  6
  •   loneStar    8 年前
     val df = Seq(
      ("A", 1), ("B", 2), ("A", 3), ("C", 1)
    ).toDF("k", "v")
    
    df.rdd.getNumPartitions