【发布时间】:2018-12-06 09:34:50
【问题描述】:
我有以下 python/pandas 命令:
df.groupby('Column_Name').agg(lambda x: x.value_counts().max()
我在哪里获取 DataFrameGroupBy 对象中所有列的值计数。
如何在 PySpark 中执行此操作?
【问题讨论】:
-
我要求的任务非常简单。我想按数据框获取组中所有列的 vale 计数(最高不同计数)。这很容易在 Pandas 中使用 value_counts() 方法完成。
-
这是我的 DF:>>> schemaTrans.show() +----+----+------+-----+----+ ----+ |COL1|COL2| COL3| COL4|COL5|身份证| +----+----+------+-----+----+----+ | 123| 456|ABC123| XYZ| 525|ID01| | 123| 456|ABC123| XYZ| 634|ID01| | 123| 456|ABC123| XYZ| 802|ID01| | 456| 123| BC01|K_L_M| 213|ID01| | 456| 123| BC01|K_L_M| 401|ID01| | 456| 123| BC01|P_Q_M| 213|ID01| | 123| 456|XYZ012| ABC| 117|ID02| | 123| 456|XYZ012|安倍| 117|ID02| | 456| 123| QPR12|S_T_U| 204|ID02| | 456| 123| QPR12|S_T_X| 415|ID02| +----+----+------+-----+----+----+
-
from pyspark.sql.functions import count exprs = {x: "count" for x in schemaTrans.columns} schemaTrans.groupBy("ID").agg(exprs).show(5) + ----+---------+------------+------------+--------- +-----------+------------+ ID|count(ID)|count(COL4)|count(COL2)|count(COL3)|count(COL1 )|计数(COL5)| +----+---------+-----------+------------+---------- -+-----------+------------+ |ID01| 6| 6| 6| 6| 6| 6| |ID02| 4| 4| 4| 4| 4| 4| +----+---------+-----------+------------+---------- -+-----------+---------
-
exprs = [countDistinct(x) for x in schemaTrans.columns] schemaTrans.groupBy("ID").agg(*exprs).show(5) | ID|(DISTINCT COL1)|(DISTINCT COL2)|(DISTINCT COL3)|(DISTINCT COL4)|(DISTINCT COL5)|(DISTINCT ID)| +----+----------------+---------------+------------ ---+---------------+---------------+----------|ID01| 2 | 2 | 2 | 3 | 5 | 1 | |ID02| 2 | 2 | 2 | 4 | 3 | 1 | +----+----------------+---------------+------------ ---+---------------+---------------+---------
-
请不要将这些添加为 cmets。 Edit你的问题并把它放在那里。另请阅读how do I format my code blocks。另请查看how to make good reproducible apache spark dataframe examples。
标签: dataframe count pyspark pandas-groupby