Я пытаюсь вычислить среднее число чисел, указанных в текстовом файле на 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();
@ sramalingam24 1) У меня настроены профили экземпляров ec2 в кластере, у которых есть доступ к S3 через конечные точки vpc. 2) Я не знаю фрейма данных 3) API лучше работать.
@ sramalingam24 Я не знаю, как это сделать. :( какие справочники вы могли бы указать для aws emr spark?
parallelize
используется только в том случае, если вы хотите преобразовать некоторые данные в драйвере в RDD, чтобы вы могли работать с ним параллельно. Вместо этого вы должны использовать spark.read.*
для распределенной загрузки данных. Опять же, я бы порекомендовал вам потратить некоторое время на чтение искровых документов, и то, что вы пытаетесь сделать, вероятно, будет более ясным.
@RyanWidmaier Это объясняет stackoverflow.com/questions/52882052/…? Я использую тот же код SparkPi в режиме кластера с атрибутом класса, указанным для данного класса
Нет, возможно, у вас возникли проблемы с настройкой размера вашего драйвера / исполнителя. Сложно сказать без дополнительной информации
Я использую terraform для создания кластера. Я также не указал размер драйвера / исполнителя для кластера / шага без конфигурации
Вероятно, вы захотите использовать функциональность Spark SQL
/ DataFrame
. Эти API-интерфейсы предоставляют вам преобразования, подобные SQL, которые дадут вам лучшую производительность, чем API-интерфейсы нижнего уровня RDD
. MLib
- это компонент машинного обучения Spark, который вам не нужен для операций ETL, только если вы тренируете новую модель машинного обучения.
Вам следует начать с чтения. Во-первых, я бы начал с общей документации по искрам. Это даст вам представление о том, как вы собираетесь вводить данные в свою работу Spark и взаимодействовать с ними.
Затем я читал об EMR. В частности, о том, как создать кластер и как получить доступ к искровой оболочке:
Создайте кластер EMR с помощью Spark
Доступ к оболочке Spark в кластере EMR
Как только вы окажетесь в искровой оболочке, вы сможете загружать данные из S3 так же, как вы можете из HDFS. Например, для простых текстовых файлов вы можете просто сделать (при условии pyspark):
df = spark.read.text("s3://some-bucket/path/to/files/")
Спасибо, Райан. Я закончил настройку кластера. Я не уверен, что использовать? Уменьшение карты?
Я добавил образец sparkPi с некоторыми qs
Вам придется задать себе несколько вопросов: 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/…)