В Spark я написал такую таблицу (я сделал это, потому что в первой таблице было слишком много разделов):
spark.table('table1')\
.coalesce(2000).write.format('orc').mode('overwrite').saveAsTable("table2")
Когда я смотрю в формате hdf, я вижу это:
hdfs dfs -ls hdfs://ha/apps/hive/warehouse/my.db/table2
Found 2001 items
Это верно.Но когда я пытаюсь использовать getNumPartitions
, то вижу что-то странное:
spark.table('table2').rdd.getNumPartitions()
1962
Меня пытались сделать repartition(2000)
вместо coalesce
, но:
spark.table('table1')\
.repartition(2000).write.format('orc').mode('overwrite').saveAsTable("table3")
hdfs dfs -ls hdfs://ha/apps/hive/warehouse/my.db/table3
Found 2001 items
spark.table('table3').rdd.getNumPartitions()
2167
Просто для интереса, я делаю перераспределение в определенном столбце, который содержит только 293 уникальных значения, и вот результат:
spark.table('table1')\
.repartition(2000, "agg_date").write.format('orc').mode('overwrite').saveAsTable("table4")
hdfs dfs -ls hdfs://ha/apps/hive/warehouse/my.db/table4
Found 276 items
spark.table('table4').rdd.getNumPartitions()
2167
Я не могу объяснить, почему это работает так странно.Почему в первом и втором случаях у меня правильное количество файлов, странные результаты шины getNumPartitions()
?И почему в третьем случае я получил 275 файлов вместо 293, которые я ожидал, и getNumPartitions()
показали мне что-то странное?
Спасибо!