Spark SQL平均非零值

时间:2016-05-31 04:38:15

标签: scala apache-spark apache-spark-sql spark-dataframe

在Scala Spark中

val df = sc.parallelize(0 to 3).toDF("x")
df.registerTempTable("df")

sqlContext.sql("select * from df").show
+---+
|  x|
+---+
|  0|
|  1|
|  2|
|  3|
+---+

并且只想平均非零值。试过这个(不起作用),

sqlContext.sql("select avg(nullif(x,0)) from df").show

平均非零值的简单有效方法是什么?

3 个答案:

答案 0 :(得分:3)

尝试:

sqlContext.sql(
  "select avg(case when id=0 then null else id end), avg(id) from df"
).show

答案 1 :(得分:1)

要选择非零值,请使用where子句,如

 sqlContext.sql("select avg(x) from df where x >0").show

我得到的回应是

+---+
|_c0|
+---+
|2.0|
+---+

答案 2 :(得分:1)

您也可以在没有sql语句的情况下尝试:

<强>爪哇:

df.filter(df.col("x").gt(0).or(df.col("x").lt(0))) // x > 0 or x < 0
  .select(org.apache.spark.sql.functions.avg("x")) // avg(x)
  .show();

<强> Scala的:

df.filter(df("x")>0 || df("x")<0)
  .select(avg("x"))
  .show