PySpark:我认为我的GroupBy将函数应用于整个列,而不是唯一的子组

PySpark:我认为我的GroupBy将函数应用于整个列,而不是唯一的子组,pyspark,apache-spark-sql,pyspark-dataframes,Pyspark,Apache Spark Sql,Pyspark Dataframes,我有一个数据框,列为“asin”和“price”。以下是前20行: +----------+-----+ |asin |price| +----------+-----+ |B006I74FRS|27.99| |B006I74FRS|null | |B006I74FRS|41.95| |B006I74FRS|null | |B006I74FRS|24.99| |B006I74FRS|null | |B006I74FRS|58.0 | |B006I74FRS|null | |B006I7

我有一个数据框,列为“asin”和“price”。以下是前20行:

+----------+-----+
|asin      |price|
+----------+-----+
|B006I74FRS|27.99|
|B006I74FRS|null |
|B006I74FRS|41.95|
|B006I74FRS|null |
|B006I74FRS|24.99|
|B006I74FRS|null |
|B006I74FRS|58.0 |
|B006I74FRS|null |
|B006I74FRS|null |
|B006I74FRS|5.49 |
|B006I74FRS|null |
|B006I74FRS|30.0 |
|B006I74FRS|null |
|B006I74FRS|15.99|
|B006I74FRS|null |
|B006I74FRS|null |
|B006I74FRS|null |
|B006I74FRS|3.99 |
|B006I74FRS|19.99|
|B006I74FRS|9.55 |
+----------+-----+
我要做的是为每个产品ID(在名为“asin”的列下)查找与该产品ID关联的行数/价格。我这样做了

df.groupby('asin').count()
但后来的结果是:

+----------+-------+
|asin      |count  |
+----------+-------+
|B007ATO2Z8|1000000|
|B005BFKR2A|1000000|
|B006I74FRS|1000000|
|B00FQITYO4|1000000|
|B00B105J0E|1000000|
|B00F9RNZ24|1000000|
|B006IIZOZO|1000000|
|B007ECGY02|1000000|
|B00GMRMCBA|1000000|
+----------+-------+

我认为groupby应用于整个价格列,而不是每个独特的asin子组。我该如何处理这种情况呢?

我认为它做的是正确的,但它没有放弃空值。请尝试以下仅统计非空项的方法:

import pyspark.sql.functions as F
df.groupBy('asin').agg(F.sum(F.col('count').isNotNull().cast('int')))

我认为它做的是对的,但它没有放弃零位。请尝试以下仅统计非空项的方法:

import pyspark.sql.functions as F
df.groupBy('asin').agg(F.sum(F.col('count').isNotNull().cast('int')))

你能详细说明你所说的空值是什么意思吗?你是说1000000个值是空值吗?无论如何,我希望在结果计算中保留空值。1000000个值包括空值。如果您想保留它们,那么您的代码实际上是正确的。是什么让您认为groupby应用于整个价格列,而不是每个唯一的asin子组?我认为,因为当我对结果数据帧执行.summary().collect()时,平均值为1000000,标准偏差为0。这是因为所有组都包含相同数量的行(1000000). 这是意料之外的吗?另外,当我在groupby期间收集_list()而不是计数时,每一行最终看起来都是一样的——一个非常长的列表。你能详细说明一下空值是什么意思吗?你是说1000000个值是空值吗?无论如何,我希望在结果计算中保留空值。1000000个值包括空值。如果您想保留它们,那么您的代码实际上是正确的。是什么让您认为groupby应用于整个价格列,而不是每个唯一的asin子组?我认为,因为当我对结果数据帧执行.summary().collect()时,平均值为1000000,标准偏差为0。这是因为所有组都包含相同数量的行(1000000). 这是意料之外的吗?另外,当我在groupby期间收集_list()而不是计数时,每一行最终看起来都是一样的——一个非常长的列表。