Not getting author rank when using return

You need a custom query – this will join the posts, postmeta and usermeta table together and then count all communityposts, post and video views, grouped by author:

function wpse_190303_get_popular_users( $number = 5 ) {
    if ( ! $number = absint( $number ) )
        return;

    global $wpdb;

    $query = "
SELECT
    SUM( $wpdb->postmeta.meta_value+0 ) AS `post_views`,
    $wpdb->usermeta.user_id AS `user_id`
FROM
    $wpdb->posts
INNER JOIN
    $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id
INNER JOIN
    $wpdb->usermeta ON $wpdb->posts.post_author = $wpdb->usermeta.user_id
WHERE
    $wpdb->posts.post_type IN( 'communityposts', 'post', 'video' ) AND
    $wpdb->posts.post_status="publish" AND
    $wpdb->postmeta.meta_key = 'cv_post_views_count' AND
    $wpdb->usermeta.meta_key = '{$wpdb->prefix}capabilities' AND
    $wpdb->usermeta.meta_value LIKE '%\\\"contributor\\\"%'
GROUP BY
    $wpdb->usermeta.user_id
ORDER BY
    post_views DESC
LIMIT
    $number
";

    if ( $result = $wpdb->get_results( $query ) )
        cache_users( wp_list_pluck( $result, 'user_id' ) );

    return $result;
}

To use:

if ( $data = wpse_190303_get_popular_users() ) {
    foreach ( $data as $item ) {
        $user_id = $item->user_id;
        $views   = $item->post_views;

        // Your code to output the popular authors
    }
}