AWS EMR Spark - 从 S3 上的文件计算数字的平均值

AWS EMR Spark - calculate avg of numbers from file on S3

我正在尝试使用 AWS EMR 上的 Spark 计算 S3 上 txt 文件中给出的数字的平均值。

但是我不确定我应该使用 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();

您可能想要使用 Spark SQL/DataFrame 功能。这些 API 为您提供 SQL 类转换,与较低级别的 RDD API 相比,它们可为您提供更好的性能。 MLib是Spark的机器学习组件,不需要做ETL操作,只有在训练新的ML模型时才需要。

你应该从阅读开始。首先,我将从一般的 spark 文档开始。这将使您了解如何将数据导入 Spark 作业并与之交互。

Spark Quick Start

然后我会阅读电子病历。具体如何创建集群,以及如何访问spark shell:

Create EMR cluster with Spark

Accessing Spark shell on EMR cluster

进入 spark shell 后,您将能够从 S3 加载数据,就像从 HDFS 加载数据一样。例如,对于简单的文本文件,您可以这样做(假设是 pyspark):

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