【发布时间】:2021-01-26 14:21:11
【问题描述】:
我有一个在 EMR 上运行的 pyspark 应用程序,我想监控它的一些指标。
例如计数加载,保存的行。目前我使用count 操作来提取值,这显然会减慢应用程序的速度。我在想是否有更好的选择来从数据框中提取这些指标?
我正在使用 pyspark 2.4.5
【问题讨论】:
标签: performance apache-spark pyspark monitoring
我有一个在 EMR 上运行的 pyspark 应用程序,我想监控它的一些指标。
例如计数加载,保存的行。目前我使用count 操作来提取值,这显然会减慢应用程序的速度。我在想是否有更好的选择来从数据框中提取这些指标?
我正在使用 pyspark 2.4.5
【问题讨论】:
标签: performance apache-spark pyspark monitoring
如果您要计算完整的数据帧,请先尝试persisting 数据帧,这样您就不必运行两次计算。
如果可以接受近似计数,您可以在计数前sample 以加快速度。
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 parquet 或delta lake 格式来存储数据。它存储统计信息,因此计数结果很快(以秒为单位)。
如果您可以在没有精确计数的情况下生活,那么您可以使用Dataframe.isEmpty、Dataframe.first、Dataframe.head(<number of rows>) 等来满足您的需求。
【讨论】: