Почему невозможно определить разделы в фрейме данных, если можно получить количество разделов в Spark? - PullRequest
0 голосов
/ 17 июня 2020

Используя df.rdd.getNumPartitions(), мы можем получить количество разделов. Но как получить разделы?

Я также попытался взять кое-что из документации и все атрибуты (используя dir(df)) фрейма данных. Однако я не смог найти ни одного API, который дал бы разделы, только repartitioning, coalesce, getNumPartitions были всем, что я мог найти.

Я прочитал это и вывел что Spark не знает ключа (ов) разделения. Я сомневаюсь, что если он не знает ключ (ключи) разделения и, следовательно, не знает разделы, как он может узнать их количество? Если может, то как определить разделы?

Ответы [ 2 ]

1 голос
/ 17 июня 2020

pyspark предоставляет функцию spark_partition_id().

spark_partition_id ()

Столбец для ID раздела.

Примечание: это неопределенный c, потому что он зависит от разделения данных и планирования задач.

>>> from pyspark.sql.functions import *
>>> spark.range(1,1000000)
      .withColumn("spark_partition",spark_partition_id())
      .groupby("spark_partition")
      .count().show(truncate=False)
+---------------+------+
|spark_partition|count |
+---------------+------+
|1              |500000|
|0              |499999|
+---------------+------+

Разделы пронумерованы от нуля до n-1 где n - это номер, который вы получите от getNumPartitions().

Это то, что вам нужно? Или вы на самом деле имели ввиду Hive разделов?

1 голос
/ 17 июня 2020

Как насчет проверки того, что содержит раздел, используя mapPartitionsWithIndex

Этот код будет работать для небольшого набора данных

def f(splitIndex, elements): 
  elements_text = ",".join(list(elements))
  yield splitIndex, elements_text

rdd.mapPartitionsWithIndex(f).take(10)
...