Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Spark Java中计算中值_Java_Apache Spark - Fatal编程技术网

在Spark Java中计算中值

在Spark Java中计算中值,java,apache-spark,Java,Apache Spark,我有一个包含多个列的数据集 主题 学生 标记 我想找到分数的最小值、最大值和中位数 df.group(df.col(“主题”)、df.col(“学生”)) .agg(functions.min(df.col(“标记”), functions.max(df.col(“标记”)) 如何找到“分数”列的中位数 我知道我们可以在SQL中使用percentile_近似值来实现这一点。有没有办法使用Dataset实现这一点 编辑:链接的问题指向包含pyspark API的答案,而该问题是专门针对java

我有一个包含多个列的数据集

  • 主题
  • 学生
  • 标记 我想找到分数的最小值、最大值和中位数
df.group(df.col(“主题”)、df.col(“学生”))
.agg(functions.min(df.col(“标记”),
functions.max(df.col(“标记”))

如何找到“分数”列的中位数

我知道我们可以在SQL中使用percentile_近似值来实现这一点。有没有办法使用Dataset实现这一点

编辑:链接的问题指向包含pyspark API的答案,而该问题是专门针对java的

您可以使用
percentile_近似值
UDF。 诸如此类

    SparkSession spark = SparkSession
            .builder()
            .config(new SparkConf().setAppName("medianTest").setMaster("local[*]"))
            .getOrCreate();

    StructType schema = DataTypes.createStructType(new StructField[]{
            createStructField("subject", DataTypes.StringType, true),
            createStructField("student", DataTypes.StringType, true),
            createStructField("mark", DataTypes.IntegerType, true)
    });

    List<Row> rows = Arrays.asList(
            RowFactory.create("CS", "Alice", 85),
            RowFactory.create("CS", "Alice", 81),
            RowFactory.create("CS", "Alice", 97),
            RowFactory.create("CS", "Bob", 92),
            RowFactory.create("CS", "Bob", 75),
            RowFactory.create("CS", "Bob", 99),
            RowFactory.create("CS", "Carol", 71),
            RowFactory.create("CS", "Carol", 84),
            RowFactory.create("CS", "Carol", 91)
    );

    Dataset df = spark.createDataFrame(rows, schema);

    df
            .groupBy("subject", "student")
            .agg(
                    min("mark").as("min"),
                    max("mark").as("max"),
                    callUDF("percentile_approx", col("mark"), lit(0.5)).as("median")
            )
            .show();
SparkSession spark=SparkSession
.builder()
.config(新的SparkConf().setAppName(“medianTest”).setMaster(“local[*]))
.getOrCreate();
StructType架构=数据类型。createStructType(新的StructField[]{
createStructField(“主题”,DataTypes.StringType,true),
createStructField(“学生”,DataTypes.StringType,true),
createStructField(“标记”,DataTypes.IntegerType,true)
});
List rows=Arrays.asList(
创建(“CS”,“Alice”,85),
创建(“CS”,“Alice”,81),
创建(“CS”,“Alice”,97),
创建(“CS”,“Bob”,92),
创建(“CS”,“Bob”,75),
创建(“CS”,“Bob”,99),
创建(“CS”,“Carol”,71),
创建(“CS”,“Carol”,84),
创建(“CS”,“Carol”,91)
);
数据集df=spark.createDataFrame(行、模式);
df
.groupBy(“主题”、“学生”)
阿格先生(
最小(“标记”)。作为(“最小”),
最大值(“标记”)。作为(“最大值”),
callUDF(“百分位_近似值”),col(“标记”),lit(0.5))。作为(“中位数”)
)
.show();

下次,请使用搜索功能。这些事情很可能以前没有人问过也没有人回答过。。。好了,你可以在
Dataset
上运行SQL,或者我错了吗?我确实搜索了相关的项目,但他们都谈到了在spark上下文上运行SQL。所以我特别提过。我不知道如何在数据集上运行sql?我明白了。在Dataset API中似乎没有用于它的函数。我一直认为在
数据集上运行SQL是可能的。最后一个
DataFrame
只是一个
Dataset[Row]
。在
数据集上使用
createOrReplaceTempView
,然后用
SQLContext
运行SQL不起作用?或者干脆用
percentile