Анализ данных с помощью Unix - Часть 2

Опубликовано: 16 Февраля, 2022

Использование UNIX
Итак, теперь мы узнаем самую высокую зарегистрированную глобальную температуру в наборе данных (за каждый год) с помощью Unix?
Классическим инструментом для обработки строчно-ориентированных данных является awk .

Small script to find the maximum temperature for each year in NCDC data

#!/user / bin / env bash
for year in all/*
do
    # using each year data file
    echo -ne `basename $year .gz`" "
    # substring to search in
    gunzip -c $year |
        awk "{ temp = substr($0, 88, 5) + 0;
                q = substr($0, 93, 1);
                if (temp != 9999 && q ~ /[01459]/ && temp > max) max = temp }
            END { print max }"
done

Контент проходит через упакованные годовые записи, сначала выводя год, а затем подготавливая каждую запись с помощью awk. Содержимое awk концентрирует два поля информации: температуру воздуха и код качества. Значение температуры воздуха преобразуется в целое число путем включения 0. Затем подключается тест, чтобы увидеть, является ли температура допустимой (значение 9999 означает отсутствие стимула в наборе данных NCDC) и демонстрирует ли код качества, что просмотр не является предположением или неверным. Если с просмотром все в порядке, ценность противопоставляется, и до этого момента видна наибольшая ценность, которая обновляется, если обнаруживается другое наиболее экстремальное значение. Блок END выполняется после того, как каждая строка в записи подготовлена, и выводит максимальное значение.

Результат выполнения: [Начало вывода]

% ./max_tempera.sh
1901 317
1902 244
1903 289
1904 256

Значения температуры в исходной записи увеличены в 10 раз, так что получается самая экстремальная температура в 31,7 ° C для 1901 года (в начале века было не очень много показаний, так что это возможно). Всего за столетие продолжалось выполнение 42 минут на одном экземпляре EC2 High-CPU Extra Large.
Чтобы ускорить подготовку, мы должны запускать части программы параллельно. В принципе, это ясно: мы могли бы обрабатывать разные годы различными процедурами, используя все доступные на станке комплекты оборудования.

Проблемы -

  • Начнем с того, что разделение работы на части одинакового размера не во всех случаях является простым или самоочевидным. В этой ситуации рекордная оценка за разные годы в целом смещается, поэтому некоторые процедуры будут завершены намного раньше, чем другие.
    Независимо от того, получат ли они дальнейшую работу, на всем протяжении пробега управляет самая длинная запись. Более совершенная методология, хотя и требующая большей работы, состоит в том, чтобы разделить вклад на части фиксированного размера и переложить каждый кусок на процедуру.
  • Во-вторых, консолидация результатов бесплатных процедур может потребовать дополнительной подготовки. В этой ситуации результат для каждого года не зависит от разных лет, и их можно объединить, объединив каждый из результатов и упорядочив по годам. На случай, если при использовании подхода с фиксированной оценкой единовременно получится все более хрупкое сочетание. Для этой модели информация за определенный год обычно будет разделена на несколько частей, каждая из которых обрабатывается автономно. В итоге мы получим самую высокую температуру для каждого комка, поэтому последний шаг - поиск наиболее примечательных из этих максимумов на каждый год.
  • В-третьих, вы пока ограничены пределами управляемости одиночной машины. На случай, если вы сможете достичь лучшего времени за 20 минут с таким количеством процессоров, которое у вас есть, вот и все. Вы не можете заставить его идти быстрее. Точно так же некоторые наборы данных развиваются за пределы возможностей одиночной машины. Когда мы начинаем использовать разные машины, целый ряд различных компонентов становится неотъемлемым фактором, по большей части подпадающим под классификации по координации и надежности.