Spark SQL 平均非零值

Spark SQL average non zero values

在 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

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

尝试:

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

对于select非零值,有一个像

这样的where子句
 sqlContext.sql("select avg(x) from df where x >0").show

我得到的回复是

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

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

Java:

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