数据框重新分区没有按预期发生

时间:2017-01-13 10:32:19

标签: apache-spark apache-spark-sql spark-dataframe

我在spark下面的代码中运行以创建具有parttion 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

1 个答案:

答案 0 :(得分:0)

在创建表uacc.temp1时,您实际上将数据帧写入hdfs,现在当您再次加载该表时,分区数由hdfs文件的数量控制(更具体:文件拆分),请参阅How does partitioning work for data from files on HDFS?