apache-spark - 空值和 countDistinct 与 Spark 数据帧

标签 apache-spark pyspark pyspark-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值(value)对我来说并不直观。

对你来说它看起来是一个错误还是正常的?如果这是正常的,我如何编写一些与第一种方法的结果完全相同但与第二种方法具有相同精神的东西。

最佳答案

countDistinctHive 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 函数很常见。

关于apache-spark - 空值和 countDistinct 与 Spark 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40345117/

相关文章:

apache-spark - Spark 结构化流在追加模式下显示结果太迟

hadoop - 如何在pyspark中更改DataFrame的HDFS block 大小

apache-spark - GroupByKey并创建值列表pyspark sql dataframe

python - Pyspark RDD .filter() 带通配符

python - SparkContext 错误 - 找不到文件/tmp/spark-events 不存在

pyspark - 将 map 数组组合成pyspark数据帧中的单个 map

apache-spark - Azure 突触 Apache Spark : Pipeline level spark configuration

python - 时间序列不一致的pyspark滞后函数

apache-spark - weekofyear() 返回 1 月 1 日看似不正确的结果

apache-spark - 使用 Mahout 向量训练 Spark k-means