If it needs to be 100% accurate, then count(*) is the only way. If your data is write-once data, you might be able to track the row count at the application level through some kind of atomic counter in a different table (but this will likely be brittle). If you can live with an estimate, you could enable statistics , optionally configuring Phoenix not to use stats for parallelization , and query the SYSTEM.STATS table to get an estimate .
Another interesting alternative if you want the approximate row count when you have a where clause would be to use the new table sampling feature . You'd also want stats enabled for this to be more accurate too.
 select sum(GUIDE_POSTS_ROW_COUNT) from SYSTEM.STATS where physical_name='my_schema.my_table'
and COLUMN_FAMILY='my_first_column_family' -- necessary only if you have multiple column families