同一查询中的火花计数和筛选计数



在SQL中类似

SELECT  count(id), sum(if(column1 = 1, 1, 0)) from groupedTable

可以制定为在单次传递中对总记录以及过滤记录进行计数。

如何在火花数据帧 API 中执行此操作?即无需将其中一个计数重新连接到原始数据帧。

只需在这两种情况下使用 count

df.select(count($"id"), count(when($"column1" === 1, true)))

如果列是nullable则应更正(例如,根据所需的输出,使用 coalesceIS NULL)。

您可以尝试将 Spark 与 Hive 一起使用,因为 Hive 支持 SQL 的 sum if() 功能

首先,您需要使用以下代码在数据之上创建 Hive 表

val conf = new SparkConf().setAppName("Hive_Test")
val sc = new SparkContext(conf)
//Creation of hive context      
val hsc = new HiveContext(sc)
import spark.implicits._
import spark.sql
hsc.sql("CREATE TABLE IF NOT EXISTS emp (id INT, name STRING)")
hsc.sql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/test.txt' INTO TABLE emp")

hsc.sql("""select count(id), SUM(v)
from (
select id, IF(name=1, count(*), 0) AS v
from emp
where id>0
group by id,name
) t2""")

相关内容

  • 没有找到相关文章

最新更新