You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "Josh Rosen (JIRA)" <ji...@apache.org> on 2019/04/27 02:07:00 UTC

[jira] [Created] (SPARK-27581) DataFrame countDistinct("*") fails with AnalysisException: "Invalid usage of '*' in expression 'count'"

Josh Rosen created SPARK-27581:
----------------------------------

             Summary: DataFrame countDistinct("*") fails with AnalysisException: "Invalid usage of '*' in expression 'count'"
                 Key: SPARK-27581
                 URL: https://issues.apache.org/jira/browse/SPARK-27581
             Project: Spark
          Issue Type: New Feature
          Components: SQL
    Affects Versions: 2.4.0
            Reporter: Josh Rosen


If I have a DataFrame then I can use {{count("*")}} as an expression, e.g.:

{code}
import org.apache.spark.sql.functions._
val df = sql("select id % 100 from range(100000)")
df.select(count("*")).first()
{code}

However, if I try to do the same thing with {{countDistinct}} I get an error:

{code}
import org.apache.spark.sql.functions._
val df = sql("select id % 100 from range(100000)")
df.select(countDistinct("*")).first()

org.apache.spark.sql.AnalysisException: Invalid usage of '*' in expression 'count';
{code}

As a workaround, I need to use {{expr}}, e.g.

{code}
import org.apache.spark.sql.functions._
val df = sql("select id % 100 from range(100000)")
df.select(expr("count(distinct(*))")).first()
{code}

You might be wondering "why not just use {{df.count()}} or {{df.distinct().count()}}?"  but in my case I'd ultimately to compute both counts as part of the same aggregation, e.g.

{code}
val cnt, distinctCnt = df.select(count("*"), countDistinct("*)).as[(Long, Long)].first()
{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@spark.apache.org
For additional commands, e-mail: issues-help@spark.apache.org