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