什么是最好的方法来计数行在火花数据帧监控?



我有一个运行在EMR上的pyspark应用程序,我想监控它的一些指标。例如,对加载、保存的行进行计数。目前我使用count操作来提取值,这显然会降低应用程序的速度。我在想是否有更好的选择从数据框架中提取这些指标?我正在使用pyspark 2.4.5

如果要计算完整的数据帧,请尝试先持久化数据帧,这样您就不必运行两次计算。

如果一个近似的计数是可以接受的,你可以在计数前采样,以加快速度。

sample_fraction = 0.01 # take a roughly 1% sample
sample_count = df.sample(fraction=sample_fraction).count() # count the sample
extrapolated_count = sample_count / sample_fraction # estimate the total count

还有一个approx_count_distinct函数,如果您需要特定列的不同值的计数。

如果您需要精确计数,那么use parquetdelta lake格式来存储数据。它存储统计数据,因此计数结果很快(以秒为单位)。

如果你可以没有精确的计数,那么你可以使用Dataframe.isEmpty,Dataframe.first,Dataframe.head(<number of rows>)等来补偿你的需求。

最新更新