В нашем коде Dataframe был создан как:Преобразование Dataframe в РДУ уменьшает разделы
DataFrame DF = hiveContext.sql("select * from table_instance");
Когда я конвертировать мой dataframe в РДУ и попытаться получить его количество разделов, как
RDD<Row> newRDD = Df.rdd();
System.out.println(newRDD.getNumPartitions());
Это уменьшает количество разделов до 1 (1 печатается на консоли). Изначально у моего DataFrame было 102 раздела.
UPDATE:
Во время чтения я repartitoned в dataframe:
DataFrame DF = hiveContext.sql("select * from table_instance").repartition(200);
, а затем преобразуется в РДД, поэтому он дал мне только 200 разделов. ли
JavaSparkContext
имеет определенную роль в этом? Когда мы преобразуем dataframe в rdd, по умолчанию минимальный флаг разделов также рассматривается на уровне искрового контекста?
UPDATE:
Я сделал отдельный пример программы, в которой я читал ту же самую таблицу в dataframe и преобразуется в РДУ. Никакой дополнительный этап не был создан для преобразования RDD, и количество разделов также было правильным. Теперь я задаюсь вопросом, что я делаю в своей основной программе.
Пожалуйста, дайте мне знать, если мое понимание здесь не так.
Спасибо за ответ @code. Я когда-нибудь застрял в этом вопросе. Разделы из hivecontext.sql() считываются как 102.Я запустил счетное действие на dataframe и узнал, что запущено 102 задачи и, следовательно, 102 раздела. Теперь, когда я делаю перераспределение, это вызывает много перетасовки. Я хочу сделать разбивку на основе некоторых столбцов, пожалуйста, предложите технику перераспределения, которая может выполнять минимальный перетасовка –
Не могли бы вы объяснить, какой тип столбца и какой диапазон значений? – code
В основном это определяется пользователем. Это может быть строка, long, bigint. Любой тип данных столбца может присутствовать. –