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
在 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