2016-09-28 4 views
1

Я следил за This Stack Over Flow question, где показано, как подсчитывать строки в свинье.Любой более быстрый способ подсчета строк в свинге

Проблема, которую я нашел, это невероятно много времени, если я выполняю некоторое соответствие фильтра регулярных выражений и другую операцию, прежде чем пытаться подсчитать строки фильтрованной переменной.

Вот мой код

all_data = load '/logs/chat1.log' USING TextLoader() as line:chararray; 
match_filter_1 = filter all_data by (line matches 'some regex'); 
inputGroup = GROUP match_filter_1 ALL; 
totalLine = foreach inputGroup generate COUNT (match_filter_1); 
dump totalLine; 

так, есть ли способ, чтобы получить результат быстрее?

+0

что размер ваших данных –

+0

сейчас это размер данных демо, как 2 Гб. –

ответ

0

Используйте PARALLEL положение, чтобы увеличить параллелизм работы:

PARALLEL устанавливает ряд снижающих задач для заданий MapReduce порожденных Свиньи. Значение по умолчанию - 1 (одна задача уменьшения). PARALLEL влияет только на количество задач сокращения. Параллелизм карты определяется входным файлом, по одной карте для каждого блока HDFS. Если вы не укажете PARALLEL, вы все равно получите тот же параллелизм карт, но только одну задачу уменьшения.

A = LOAD 'myfile' AS (t, u, v); 
B = GROUP A BY t PARALLEL 18; 

Надеюсь, что это помогает !!! ...

+0

В настоящее время моя работа с отходами отложена. поэтому я не могу попробовать это прямо сейчас и поэтому соглашаюсь или отрицаю. но как только я возобновляю работу, я обязательно попробую это и надеюсь сделать положительный отзыв. –