Apache spark 数据帧重新分区未按预期进行

Apache spark 数据帧重新分区未按预期进行,apache-spark,apache-spark-sql,spark-dataframe,Apache Spark,Apache Spark Sql,Spark Dataframe,我在spark中运行下面的代码来创建编号为200的表temp1。但是,当我通过在temp1表中创建一个rdd来检查分区的实际数量时,它将超过200个。 这怎么可能,我遗漏了什么。如果有人能告诉我,如果我遗漏了什么,那将非常有帮助!!谢谢 val TransDataFrame = hiveContext.sql( s""" SELECT * FROM uacc.TRANS WHERE PROD_SURRO_ID != 0

我在spark中运行下面的代码来创建编号为200的表temp1。但是,当我通过在temp1表中创建一个rdd来检查分区的实际数量时,它将超过200个。 这怎么可能,我遗漏了什么。如果有人能告诉我,如果我遗漏了什么,那将非常有帮助!!谢谢

  val TransDataFrame = hiveContext.sql(
      s""" SELECT *
            FROM uacc.TRANS
            WHERE PROD_SURRO_ID != 0
            AND MONTH_ID >= 201401
            AND MONTH_ID <= 201403
            AND CRE_DT   <=  '2016-11-13'

         """).repartition(200,$"NDC").registerTempTable("temp")


   hiveContext.sql(
      s"""
          CREATE TABLE uacc.temp1
          AS SELECT * FROM temp
        """) 


val df = hiveContext.sql("SELECT * FROM uacc.temp1")
df.rdd.getNumPartitions
1224
val TransDataFrame=hiveContext.sql(
s“选择”*
来自uacc.TRANS
其中PROD_SURRO_ID!=0
月份ID>=201401

当您创建表时,实际上是将数据帧写入hdfs,现在当您再次加载该表时,分区的数量由hdfs文件的数量控制(更具体地说:文件拆分),请参见

如果选中TransDataFrame,它将有200个分区。您正在将其写入hdfs,并加载回新的rdd,该rdd将根据用于保存表的hdfs块数给出分区数。