Классификация операторов Spark
С общей точки зрения операторы Spark могут быть примерно разделены на следующие две категории:
1.)
Операции преобразования являются отложенными расчетами, что означает, что операция преобразования для генерации другого RDD из одного преобразования RDD не выполняется немедленно. Требуется ожидание, пока операция действия будет доступна до того, как операция будет запускается.
2) Оператор действия действия: этот тип оператора запустит SparkContext, чтобы отправить задание.
Оператор действия запустит задание подчинения Spark (задание) и выведет данные в систему Spark.
С небольшой точки зрения операторы Spark могут быть примерно разделены на следующие три категории:
1) Оператор преобразования типа данных. Это преобразование не вызывает представления работы. Обработанные элементы данных являются данными типа значения.
2) Оператор трансфрамации типа данных ключевой стоимости. Это преобразование не вызывает представления работы. Элементы данных для обработки являются парами данных ключей.
3) Оператор действия, этот тип оператора запустит SparkContext, чтобы отправить задание.
введение
Обычно удобнее писать программы Spark со Scala, в конце концов, исходный код Spark написан в Scala. Тем не менее, в настоящее время существует много разработчиков Java, особенно когда стыковки данных и онлайн -услуги. В настоящее время вам нужно овладеть некоторыми методами использования Spark в Java.
1. Карта
Карта не может использоваться чаще при обработке и преобразовании данных
Перед использованием карты вы должны сначала определить преобразованный формат функции следующим образом:
Function <string, markeledpoint> transform = new Function <String, markeledPoint> () {// String - это тип ввода определенной строки LAHLELPOINT - это преобразованный выходной тип int rosize = rowarr.length; Double [] doubleArr = new Double [ROWISIZE-1]; // За исключением первого Lable, остальная часть детали проанализируется в двойной и помещается в массив для (int i = 1; i <ROWIZE; i ++) {string каждый = rowarr [i]; doublearr [i] = double.parsedouble (каждый); } // Конвертировать данные, которые вы только что получили, в векторную векторную функцию = vectors.dense (DoubleArr); double label = double.parsedouble (rowarr [0]); // Создание формата данных для классификации обучающей метки lakeledPoint Point = new LakeLPoint (метка, функция); возвратный пункт; }};Особое внимание должно быть уделено:
1. Ввод метода вызова должен быть типом строки данных перед преобразованием. Возвращаемое значение должно быть типом строки данных после обработки.
2. Если в методе преобразования вызывается пользовательский класс, обратите внимание, что имя класса должно быть сериализовано, например,
открытый класс Treeensemble реализует сериализуемые {}3. Если некоторые объекты класса вызываются в функции преобразования, например, метод должен вызвать внешний параметр или модель численной обработки (стандартизация, нормализация и т. Д.), Объект должен быть объявлен окончательным.
Затем вызовите функцию преобразования, когда это необходимо
Javardd <lakedpoint> rdd = oridata.tojavardd (). Map (transform);
Этот метод требует преобразования обычного RDD в Javardd для использования. Операция конвертации в Javardd не требует много времени, так что не волнуйтесь
2. Фильтр
Он также очень часто используется в сценариях, таких как предотвращение нулевых значений и 0 с, и может соответствовать функциям, где в SQL
Прежде всего, нам нужно определить функцию. Фактическое влияние возврата логического значения, учитывая линию данных, состоит в том, чтобы сохранить данные, возвращаемые к TRUE.
Function <string, boolean> booffilter = new Function <String, boolean> () {// String - тип ввода определенной строки. Boolean является соответствующим выходным типом. Используется для определения того, сохраняются ли данные. @Override public boolean call (строка строки) бросает исключение {// Переписать метод вызова boolean flag = row! = Null; вернуть флаг; }};Обычно то, что нужно изменить в фактическом использовании этой функции, является только типом строки, то есть типом ввода строки данных. В отличие от вышеуказанной функции преобразования, возвращаемое значение этого метода вызова должно быть зафиксировано как логическое.
Затем метод вызова
Javardd <lakedpoint> rdd = oridata.tojavardd (). Filter (Booflilter);
3. Maptopair
Этот метод несколько похож на метод карты, и он также выполняет некоторые преобразования в данные. Тем не менее, выход этой функции представляет собой линию ввода кортежа. Наиболее часто используемым методом является выполнение перекрестной проверки или статистического отзывного показателя ошибок и т. Д.
Точно так же вам нужно сначала определить функцию преобразования
Function <string, boolean> transformer = new PairFunction <lakedPoint, Object, Object> () {// MAHLELPOINT - это два объекта после ввода. Не изменяйте @override public tuple2 call (row madelpoint), бросает исключение {// Переписать метод вызова обычно только изменяет входные параметры и вывод. Не меняйте Double Predicton = thismodel.predict (row.features ()); Double Label = row.label (); вернуть новый Tuple2 (Predicton, Label); }});Что касается вызова класса и объекта класса, требования соответствуют предыдущему. Класс должен быть сериализован, и объект класса должен быть объявлен как конечный тип
Соответствующие вызовы следующие:
Javapairrdd <Object, Object> PredictionsandLabels = oridata.maptopair (трансформатор);
Затем, для использования прогнозов и вещей, рассчитайте точность, отзыв, точность и AUC. В следующем блоге будет. Пожалуйста, следите за обновлениями.
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.