【问题标题】:How to count frequency of min and max for all columns from a pyspark dataframe?如何计算 pyspark 数据帧中所有列的最小值和最大值的频率?
【发布时间】:2020-10-26 09:58:50
【问题描述】:

我有一个 pyspark 数据框,我在其中找出每列的最小/最大值和最小/最大值的计数。我可以使用以下方法选择最小/最大值:
df.select([min(col(c)).alias(c) for c in df.columns])
我也想在同一个数据框中计算最小值/最大值。 我需要的具体输出:
...| col_n | col_m |...
...| xn | xm |... min(col(coln))
...|计数(col_n==xn)|计数(col_m==xm)|...

【问题讨论】:

  • 你能发布你的预期输出吗

标签: pyspark apache-spark-sql


【解决方案1】:

试试这个,

from pyspark.sql.functions import udf,struct,array
from pyspark.sql.window import Window
tst= sqlContext.createDataFrame([(1,7,2,11),(1,3,4,12),(1,5,6,13),(1,7,8,14),(2,9,10,15),(2,11,12,16),(2,13,14,17)],schema=['col1','col2','col3','col4'])
expr=[F.max(coln).alias(coln+'_max') for coln in tst.columns]
tst_mx = tst.select(*expr)
#%%
tst_dict = tst_mx.collect()[0].asDict()
#%%
expr1=( [F.count(F.when(F.col(coln)==tst_dict[coln+'_max'],F.col(coln))).alias(coln+'_max_count') for coln in tst.columns])
#%%
tst_res = tst.select(*(expr+expr1))

在 expr 中,我刚刚尝试了 max 函数。您可以将其扩展到其他函数,例如 min、mean 等,甚至可以对函数列表使用列表推导。请参阅此答案以了解此类缩放:pyspark: groupby and aggregate avg and first on multiple columns 用于聚合说明,也可用于选择语句。

【讨论】:

  • 这将给出整列的计数。我想计算列中的最小值/最大值。
  • @Harhaaakr - 抱歉,刚刚知道了.. 你现在可以检查一下吗?
  • 感谢您的回答。我正在寻找一些不涉及收集语句的答案(也许我们可以使用子查询,但不知道如何在 pyspark 中使用它)。
  • 好的,不确定。由于只有您在收集摘要数据,因此在收集时内存应该不是大问题。
猜你喜欢
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 2019-04-22
  • 2015-10-29
  • 2021-01-15
  • 2015-09-30
  • 1970-01-01
  • 2014-11-20
相关资源
最近更新 更多