2015-07-21 4 views
1

Мне нужно удалить пустые разделы из DataframeКак удалить пустой раздел в dataframe?

У нас есть два Dataframes, оба они созданы с использованием sqlContext. И dataframes построено и объединено, как показано ниже

import org.apache.spark.sql.{SQLContext} 

val sqlContext = new SQLContext(sc) 

// Loading Dataframe 1 
val csv1 = "s3n://xxxxx:[email protected]/xxx.csv" 
val csv1DF = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").load(csv1) 

// Loading Dataframe 2 
val csv2 = "s3n://xxxxx:[email protected]/xxx.csv" 
val csv2DF = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").load(csv1) 

// Combining dataframes 
val combinedDF = csv1. 
       join(csv2 csv1("column_1") === csv2("column_2")) 

Теперь номер раздела для combinedDF 200. Из here было установлено, что номер по умолчанию раздела составляет 200, когда мы используем соединение.

В некоторых случаях dataframe/csv невелик и получает много пустого раздела, которое вызывает проблемы позже в части кода.

Как я могу удалить эти пустые разделы?

+2

Вы можете «переделать» свою информационную рамку. – abalcerek

+0

Какой размер мне нужно предоставить для перераспределения? – sag

+0

@ user52045 Для перераспределения я должен предоставить новый размер раздела. Но его трудно найти идеальный размер во время выполнения. Для меня, я думаю, что просто удаление пустого раздела должно быть прекрасным. – sag

ответ

2

Метод repartition может использоваться для создания RDD без каких-либо пустых разделов.

This thread обсуждает оптимальное количество разделов для данного кластера. Вот хорошее правило для оценки оптимального количества разделов.

number_of_partitions = number_of_cores * 4 

Если у вас есть кластер из 8 r3.xlarge АМС узлов, вы должны использовать 128 разделов (8 узлов * 4 процессоров на узел * 4 разделов на CPU).