带有 spark 数据框的空值和 countDistinct
null value and countDistinct with spark dataframe
我有一个非常简单的数据框
df = spark.createDataFrame([(None,1,3),(2,1,3),(2,1,3)], ['a','b','c'])
+----+---+---+
| a| b| c|
+----+---+---+
|null| 1| 3|
| 2| 1| 3|
| 2| 1| 3|
+----+---+---+
当我在此数据框上应用 countDistinct
时,我发现不同的结果取决于方法:
第一种方法
df.distinct().count()
2
这是我的结果,除了最后两行是相同的,但第一行与其他两行不同(因为空值)
第二种方法
import pyspark.sql.functions as F
df.agg(F.countDistinct("a","b","c")).show()
1
似乎 F.countDistinct
处理 null
值的方式对我来说并不直观。
您觉得它是错误还是正常?如果它是正常的,我怎么能写出一些东西来输出第一种方法的结果,但与第二种方法的精神相同。
countDistinct
与 Hive count(DISTINCT expr[, expr])
:
的工作方式相同
count(DISTINCT expr[, expr]) - Returns the number of rows for which the supplied expression(s) are unique and non-NULL.
不包括第一行。这对于 SQL 函数很常见。
我有一个非常简单的数据框
df = spark.createDataFrame([(None,1,3),(2,1,3),(2,1,3)], ['a','b','c'])
+----+---+---+
| a| b| c|
+----+---+---+
|null| 1| 3|
| 2| 1| 3|
| 2| 1| 3|
+----+---+---+
当我在此数据框上应用 countDistinct
时,我发现不同的结果取决于方法:
第一种方法
df.distinct().count()
2
这是我的结果,除了最后两行是相同的,但第一行与其他两行不同(因为空值)
第二种方法
import pyspark.sql.functions as F
df.agg(F.countDistinct("a","b","c")).show()
1
似乎 F.countDistinct
处理 null
值的方式对我来说并不直观。
您觉得它是错误还是正常?如果它是正常的,我怎么能写出一些东西来输出第一种方法的结果,但与第二种方法的精神相同。
countDistinct
与 Hive count(DISTINCT expr[, expr])
:
count(DISTINCT expr[, expr]) - Returns the number of rows for which the supplied expression(s) are unique and non-NULL.
不包括第一行。这对于 SQL 函数很常见。