подсчет искры и количество фильтров в одном запросе

В SQL что-то вроде

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

могут быть сформулированы для выполнения подсчета полных записей, а также отфильтрованных записей за один проход.

Как я могу выполнить это в API-интерфейсе искровых данных? т.е. без необходимости присоединить один из отсчетов к исходному кадру данных.

Просто используйте count для обоих случаев:

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

Если столбец является nullable вы должны исправить это (например, с coalesce или IS NULL , в зависимости от желаемого результата).

Вы можете попробовать использовать искру с улей, так как куст поддерживает сумму if () функциональности SQL

Сначала вам нужно создать таблицу улей поверх ваших данных, используя приведенный ниже код

 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""")