同一查询中的spark计数和筛选计数

时间:2017-02-02 13:34:43

标签: sql apache-spark count apache-spark-sql

在SQL中类似

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

可以制定为在一次通过中执行总记录和过滤记录的计数。

如何在spark-data-frame API中执行此操作?即无需将其中一个计数连接回原始数据帧。

2 个答案:

答案 0 :(得分:3)

在两种情况下都使用count

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

如果列为nullable,您应该更正(例如,使用coalesceIS NULL,具体取决于所需的输出。

答案 1 :(得分:0)

您可以尝试将spark与hive一起使用,因为hive支持SQL的

的if()功能

首先,您需要使用以下代码

在数据上创建配置单元表
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""")