Как рассчитываются разделы Spark по умолчанию для HadoopPartitions? - PullRequest
0 голосов
/ 01 декабря 2018

Я читаю Интернет-книгу Яцека Ласковского об Apache Spark , а в отношении разбиения он утверждает, что

По умолчанию для каждого раздела HDFS создается раздел, которыйпо умолчанию 64 МБ

Я не очень знаком с HDFS, но столкнулся с некоторыми вопросами, повторяющими это утверждение.У меня есть файл с именем Reviews.csv, который составляет около 330 МБ текстового файла обзоров продуктов питания Amazon.Учитывая стандартные блоки по 64 МБ, я бы ожидал ceiling(330 / 64) = 6 разделов.Тем не менее, когда я загружаю файлы в свою Spark Shell, я получаю 9 разделов:

scala> val tokenized_logs = sc.textFile("Reviews.csv")
tokenized_logs: org.apache.spark.rdd.RDD[String] = Reviews.csv MapPartitionsRDD[1] at textFile at <console>:24

scala> tokenized_logs
res0: org.apache.spark.rdd.RDD[String] = Reviews.csv MapPartitionsRDD[1] at textFile at <console>:24

scala> tokenized_logs.partitions
res1: Array[org.apache.spark.Partition] = Array(org.apache.spark.rdd.HadoopPartition@3c1, org.apache.spark.rdd.HadoopPartition@3c2, org.apache.spark.rdd.HadoopPartition@3c3, org.apache.spark.rdd.HadoopPartition@3c4, org.apache.spark.rdd.HadoopPartition@3c5, org.apache.spark.rdd.HadoopPartition@3c6, org.apache.spark.rdd.HadoopPartition@3c7, org.apache.spark.rdd.HadoopPartition@3c8, org.apache.spark.rdd.HadoopPartition@3c9)

scala> tokenized_logs.partitions.size
res2: Int = 9

Я замечаю, что если я создаю другую уменьшенную версию Reviews.csv с именем Reviews_Smaller.csv, которая составляет всего 135 МБ, язначительно уменьшенный размер раздела:

scala> val raw_reviews = sc.textFile("Reviews_Smaller.csv")
raw_reviews: org.apache.spark.rdd.RDD[String] = Reviews_Smaller.csv MapPartitionsRDD[11] at textFile at <console>:24

scala> raw_reviews.partitions.size
res7: Int = 4

Однако, по моей математике, должно быть ceiling(135 / 4) = 3 разделов, а не 4.

Я запускаю все локально, на моем MacBook Pro,Может кто-нибудь помочь объяснить, как рассчитывается количество разделов по умолчанию для HDFS?

1 Ответ

0 голосов
/ 01 декабря 2018

С Руководство по программированию Spark :

По умолчанию Spark создает один раздел для каждого блока файла (по умолчанию в HDFS - 128 МБ), но вы также можетепопросите большее количество разделов, передав большее значение.Обратите внимание, что вы не можете иметь меньше разделов, чем блоков.

128 МБ - это только по умолчанию размер блока HDFS, но для любого файла на самом деле может быть что-то другое.Количество разделов в вашем случае означает, что ваш файл записан с использованием блока нестандартного размера (или, более вероятно, состоит из нескольких меньших файлов).

См. этот превосходный SO дляспособы определения количества блоков, на которые разделен файл HDFS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...