Spark SQL 平均非零值



In 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

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

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

我得到的回应是

+---+
|_c0|
+---+
|2.0|
+---+
你也可以

在没有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();

斯卡拉:

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

相关内容

  • 没有找到相关文章

最新更新