在SQL中类似
SELECT count(id), sum(if(column1 = 1, 1, 0)) from groupedTable
可以制定为在一次通过中执行总记录和过滤记录的计数。
如何在spark-data-frame API中执行此操作?即无需将其中一个计数连接回原始数据帧。
答案 0 :(得分:3)
在两种情况下都使用count
:
df.select(count($"id"), count(when($"column1" === 1, true)))
如果列为nullable
,您应该更正(例如,使用coalesce
或IS 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""")