diff --git a/examples/src/main/java/org/apache/spark/examples/ml/JavaANOVATestExample.java b/examples/src/main/java/org/apache/spark/examples/ml/JavaANOVATestExample.java new file mode 100644 index 0000000000..3b2de1f39c --- /dev/null +++ b/examples/src/main/java/org/apache/spark/examples/ml/JavaANOVATestExample.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.spark.examples.ml; + +import org.apache.spark.sql.SparkSession; + +// $example on$ +import java.util.Arrays; +import java.util.List; + +import org.apache.spark.ml.linalg.Vectors; +import org.apache.spark.ml.linalg.VectorUDT; +import org.apache.spark.ml.stat.ANOVATest; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.Row; +import org.apache.spark.sql.RowFactory; +import org.apache.spark.sql.types.*; +// $example off$ + +/** + * An example for ANOVA testing. + * Run with + *
+ * bin/run-example ml.JavaANOVATestExample
+ * 
+ */ +public class JavaANOVATestExample { + + public static void main(String[] args) { + SparkSession spark = SparkSession + .builder() + .appName("JavaANOVATestExample") + .getOrCreate(); + + // $example on$ + List data = Arrays.asList( + RowFactory.create(3.0, Vectors.dense(1.7, 4.4, 7.6, 5.8, 9.6, 2.3)), + RowFactory.create(2.0, Vectors.dense(8.8, 7.3, 5.7, 7.3, 2.2, 4.1)), + RowFactory.create(1.0, Vectors.dense(1.2, 9.5, 2.5, 3.1, 8.7, 2.5)), + RowFactory.create(2.0, Vectors.dense(3.7, 9.2, 6.1, 4.1, 7.5, 3.8)), + RowFactory.create(4.0, Vectors.dense(8.9, 5.2, 7.8, 8.3, 5.2, 3.0)), + RowFactory.create(4.0, Vectors.dense(7.9, 8.5, 9.2, 4.0, 9.4, 2.1)) + ); + + StructType schema = new StructType(new StructField[]{ + new StructField("label", DataTypes.DoubleType, false, Metadata.empty()), + new StructField("features", new VectorUDT(), false, Metadata.empty()), + }); + + Dataset df = spark.createDataFrame(data, schema); + Row r = ANOVATest.test(df, "features", "label").head(); + System.out.println("pValues: " + r.get(0).toString()); + System.out.println("degreesOfFreedom: " + r.getList(1).toString()); + System.out.println("fValues: " + r.get(2).toString()); + + // $example off$ + + spark.stop(); + } +} diff --git a/examples/src/main/python/ml/anova_test_example.py b/examples/src/main/python/ml/anova_test_example.py new file mode 100644 index 0000000000..3fffdbddf3 --- /dev/null +++ b/examples/src/main/python/ml/anova_test_example.py @@ -0,0 +1,52 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +""" +An example for ANOVA testing. +Run with: + bin/spark-submit examples/src/main/python/ml/anova_test_example.py +""" +from __future__ import print_function + +from pyspark.sql import SparkSession +# $example on$ +from pyspark.ml.linalg import Vectors +from pyspark.ml.stat import ANOVATest +# $example off$ + +if __name__ == "__main__": + spark = SparkSession\ + .builder\ + .appName("ANOVATestExample")\ + .getOrCreate() + + # $example on$ + data = [(3.0, Vectors.dense([1.7, 4.4, 7.6, 5.8, 9.6, 2.3])), + (2.0, Vectors.dense([8.8, 7.3, 5.7, 7.3, 2.2, 4.1])), + (1.0, Vectors.dense([1.2, 9.5, 2.5, 3.1, 8.7, 2.5])), + (2.0, Vectors.dense([3.7, 9.2, 6.1, 4.1, 7.5, 3.8])), + (4.0, Vectors.dense([8.9, 5.2, 7.8, 8.3, 5.2, 3.0])), + (4.0, Vectors.dense([7.9, 8.5, 9.2, 4.0, 9.4, 2.1]))] + df = spark.createDataFrame(data, ["label", "features"]) + + r = ANOVATest.test(df, "features", "label").head() + print("pValues: " + str(r.pValues)) + print("degreesOfFreedom: " + str(r.degreesOfFreedom)) + print("fValues: " + str(r.fValues)) + # $example off$ + + spark.stop() diff --git a/examples/src/main/scala/org/apache/spark/examples/ml/ANOVATestExample.scala b/examples/src/main/scala/org/apache/spark/examples/ml/ANOVATestExample.scala new file mode 100644 index 0000000000..0cd793f5b7 --- /dev/null +++ b/examples/src/main/scala/org/apache/spark/examples/ml/ANOVATestExample.scala @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// scalastyle:off println +package org.apache.spark.examples.ml + +// $example on$ +import org.apache.spark.ml.linalg.{Vector, Vectors} +import org.apache.spark.ml.stat.ANOVATest +// $example off$ +import org.apache.spark.sql.SparkSession + +/** + * An example for ANOVA testing. + * Run with + * {{{ + * bin/run-example ml.ANOVATestExample + * }}} + */ +object ANOVATestExample { + + def main(args: Array[String]): Unit = { + val spark = SparkSession + .builder + .appName("ANOVATestExample") + .getOrCreate() + import spark.implicits._ + + // $example on$ + val data = Seq( + (3.0, Vectors.dense(1.7, 4.4, 7.6, 5.8, 9.6, 2.3)), + (2.0, Vectors.dense(8.8, 7.3, 5.7, 7.3, 2.2, 4.1)), + (1.0, Vectors.dense(1.2, 9.5, 2.5, 3.1, 8.7, 2.5)), + (2.0, Vectors.dense(3.7, 9.2, 6.1, 4.1, 7.5, 3.8)), + (4.0, Vectors.dense(8.9, 5.2, 7.8, 8.3, 5.2, 3.0)), + (4.0, Vectors.dense(7.9, 8.5, 9.2, 4.0, 9.4, 2.1)) + ) + + val df = data.toDF("label", "features") + val anova = ANOVATest.test(df, "features", "label").head + println(s"pValues = ${anova.getAs[Vector](0)}") + println(s"degreesOfFreedom ${anova.getSeq[Int](1).mkString("[", ",", "]")}") + println(s"fValues ${anova.getAs[Vector](2)}") + // $example off$ + + spark.stop() + } +} +// scalastyle:on println