AWS EMR Spark - вычисление среднего числа чисел из файла на S3

Я пытаюсь вычислить среднее число чисел, указанных в текстовом файле на S3, с помощью Spark на AWS EMR.

НО я не уверен, что мне использовать MLib? или sparkSQL? Все ссылки, которые я вижу, относятся к совершенно разным вещам. Может ли кто-нибудь направить меня в правильном направлении?

     SparkConf sparkConf = new 
     SparkConf().setAppName("com.company.app.JavaSparkPi");
     JavaSparkContext jsc = new JavaSparkContext(sparkConf);

    //READING S3 FILE
    //PARSING THE FILE CREATING ARRAY OF NUMBERS

    int slices = 2;
    int n = 10 * slices;
    List<Integer> l = new ArrayList<Integer>(n);
    for (int i = 0; i < n; i++) {
        l.add(i);
    }

    //NOT SURE WHAT TO DO HERE 
    //SHOULD I USE PARALLELIZE ??
    JavaRDD<Integer> dataSet = jsc.parallelize(l, slices);

    int count = dataSet.map(new Function<Integer, Integer>() {
        @Override
        public Integer call(Integer integer) {
            //JUST MAP THE INTEGER TO INT?
            //OR SOME LOGIC NEEDS TO BE PLACED
            double x = Math.random() * 2 - 1;
            double y = Math.random() * 2 - 1;
            return (x * x + y * y < 1) ? 1 : 0;
        }
    }).reduce(new Function2<Integer, Integer, Integer>() {
        @Override
        public Integer call(Integer integer, Integer integer2) {
            //SOME LOGIC HERE?
            return integer + integer2;
        }
    });

    //WRITE S3
    System.out.println("Pi is roughly " + 4.0 * count / n);

    jsc.stop();

Вам придется задать себе несколько вопросов: 1. Как вы хотите пройти аутентификацию в сегменте S3. (cloudera.com/documentation/enterprise/5-14-x/topics/…) 2. Как получить данные из S3 в фрейм данных (cloudera.com/documentation/enterprise/5-14-x/topics/…). 3. Насколько хорошо вы работаете с SQL или API (databricks.com/blog/2015/06/02/…)

sramalingam24 18.10.2018 09:20

@ sramalingam24 1) У меня настроены профили экземпляров ec2 в кластере, у которых есть доступ к S3 через конечные точки vpc. 2) Я не знаю фрейма данных 3) API лучше работать.

user8453102 18.10.2018 09:25

@ sramalingam24 Я не знаю, как это сделать. :( какие справочники вы могли бы указать для aws emr spark?

user8453102 18.10.2018 09:53
parallelize используется только в том случае, если вы хотите преобразовать некоторые данные в драйвере в RDD, чтобы вы могли работать с ним параллельно. Вместо этого вы должны использовать spark.read.* для распределенной загрузки данных. Опять же, я бы порекомендовал вам потратить некоторое время на чтение искровых документов, и то, что вы пытаетесь сделать, вероятно, будет более ясным.
Ryan Widmaier 18.10.2018 22:32

@RyanWidmaier Это объясняет stackoverflow.com/questions/52882052/…? Я использую тот же код SparkPi в режиме кластера с атрибутом класса, указанным для данного класса

user8453102 18.10.2018 22:35

Нет, возможно, у вас возникли проблемы с настройкой размера вашего драйвера / исполнителя. Сложно сказать без дополнительной информации

Ryan Widmaier 18.10.2018 22:37

Я использую terraform для создания кластера. Я также не указал размер драйвера / исполнителя для кластера / шага без конфигурации

user8453102 18.10.2018 22:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вероятно, вы захотите использовать функциональность Spark SQL / DataFrame. Эти API-интерфейсы предоставляют вам преобразования, подобные SQL, которые дадут вам лучшую производительность, чем API-интерфейсы нижнего уровня RDD. MLib - это компонент машинного обучения Spark, который вам не нужен для операций ETL, только если вы тренируете новую модель машинного обучения.

Вам следует начать с чтения. Во-первых, я бы начал с общей документации по искрам. Это даст вам представление о том, как вы собираетесь вводить данные в свою работу Spark и взаимодействовать с ними.

Быстрый запуск Spark

Затем я читал об EMR. В частности, о том, как создать кластер и как получить доступ к искровой оболочке:

Создайте кластер EMR с помощью Spark

Доступ к оболочке Spark в кластере EMR

Как только вы окажетесь в искровой оболочке, вы сможете загружать данные из S3 так же, как вы можете из HDFS. Например, для простых текстовых файлов вы можете просто сделать (при условии pyspark):

df = spark.read.text("s3://some-bucket/path/to/files/")

Спасибо, Райан. Я закончил настройку кластера. Я не уверен, что использовать? Уменьшение карты?

user8453102 18.10.2018 22:20

Я добавил образец sparkPi с некоторыми qs

user8453102 18.10.2018 22:26

Другие вопросы по теме