2015-10-22 3 views
7

Я извлекаю данные из HDFS и сохраняю их в Spark RDD. Spark создает количество разделов на основе количества блоков HDFS. Это приводит к большому количеству пустых разделов, которые также обрабатываются во время трубопровода. Чтобы удалить эти служебные данные, я хочу отфильтровать все пустые разделы из RDD. Я знаю об объединении и переделке, но нет гарантии, что все пустые разделы будут удалены.Удалить пустые разделы из Spark RDD

Есть ли другой способ этого?

+0

«* Это приводит к большому количеству пустых разделов, которые также обрабатываются во время трубопровода *« Я не понимаю этого предложения. Почему и когда создаются эти пустые разделы? –

+0

Предположим, что я получаю данные с помощью Hive, и мои hdfs имеют 500 файловых блоков для данной таблицы улья, в этом случае в RDD будет создано 500 разделов. Позже, когда вы делаете groupbykey, пустые разделы остаются. – user3898179

+1

Если у вас есть априорно о ваших данных, вы можете перераспределить, используя либо «RangePartitioner», либо «HashPartitioner». Если нет, вы можете использовать раздел на основе случайных чисел. – zero323

ответ

1

Существует не простой способ просто удалить пустые разделы из RDD.

coalesce не гарантирует удаление пустых разделов. Если у вас есть RDD с 40 пустыми разделами и 10 разделами с данными, по-прежнему будут пустые разделы после rdd.coalesce(45).

Метод repartition равномерно распределяет данные по всем разделам, поэтому не будет никаких пустых разделов. Если у вас есть RDD с 50 пустыми разделами и 10 разделами с данными и запуском rdd.repartition(20), данные будут равномерно распределены по 20 разделам.

Смежные вопросы