在sparkDataframe列中获取最大值的最佳方法
这篇文章展示了如何在表上运行聚合(distinct、min、max),例如:
for colName in df.columns:
dt = cd[[colName]].distinct().count()
mx = cd.agg({colName: "max"}).collect()[0][0]
mn = cd.agg({colName: "min"}).collect()[0][0]
print(colName, dt, mx, mn)
这可以很容易地通过计算统计来完成。hive和spark的数据不同:
配置单元提供-distinct、max、min、nulls、length、version
Spark给出-计数,平均值,标准偏差,最小值,最大值
看起来有很多统计数据是经过计算的。如何使用一个命令获取所有列的所有属性?
但是,我有1000个列,按顺序执行这个操作非常慢。假设我想计算另一个函数,比如每列的标准差,如何并行计算呢?
2条答案
按热度按时间2wnc66cl1#
你可以用
pyspark.sql.DataFrame.describe()
获取所有列的聚合统计信息,如计数、平均值、最小值、最大值和标准偏差,这些统计信息适用于这些列(如果不传入任何参数,则默认情况下会返回所有列的统计信息)如你所见,这些统计数据忽略了任何
null
价值观。如果您使用的是spark版本2.3,那么
pyspark.sql.DataFrame.summary()
支持以下聚合:count-mean-stddev-min-max-指定为百分比的任意近似百分位数(例如,75%)
如果您想对所有列使用其他聚合统计信息,还可以使用列表
pyspark.sql.DataFrame.agg()
. 例如,如果您想复制您所说的hive提供的内容(distinct、max、min和nulls-我不确定长度和版本的含义):尽管此方法将返回一行,而不是每个统计信息返回一行
describe()
以及summary()
去吧。pnwntuvh2#
你可以在一个句子中输入尽可能多的表达式
agg
正如你所希望的,当你收集它们的时候,它们会立刻被计算出来。结果是包含所有值的单行。举个例子:您也可以在这里使用字典语法,但是对于更复杂的事情,它更难管理。