如何使我的 Spark Accumulator 统计信息在 Azure Databricks 中可靠?

Posted

技术标签:

【中文标题】如何使我的 Spark Accumulator 统计信息在 Azure Databricks 中可靠?【英文标题】:How can i make my Spark Accumulator statistics reliable in Azure Databricks? 【发布时间】:2021-12-08 23:24:05 【问题描述】:

我正在使用火花累加器来收集每个管道的统计信息。

在典型的管道中,我会读取一个 data_frame:

df = spark.read.format(csv).option("header",'true').load('/mnt/prepared/orders')
df.count() ==> 7 rows

然后我实际上会在两个不同的位置写它:

df.write.format(delta).option("header",'true').load('/mnt/prepared/orders')
df.write.format(delta).option("header",'true').load('/mnt/reporting/orders_current/')

不幸的是,每次write 操作都会更新我的累加器统计信息。它给出了一个读取 14 行的数字,而我只读取了一次输入数据帧。

如何让我的累加器正确反映我实际读取的行数。

我是 spark 的新手。围绕这个问题检查了几个线程,但没有找到我的答案。 Statistical accumulator in Python spark Accumulator reset When are accumulators truly reliable?

【问题讨论】:

除了累加器,您要测量什么? 【参考方案1】:

第一条规则 - 累加器不是 100% 可靠的。它们可以被多次更新,例如,如果任务被重新启动/重试。

在你的情况下,虽然你读过一次,但这并不意味着数据不会被再次读取。读取操作只是获取元数据,例如架构,如果您对某些数据类型使用inferSchema,可能会读取数据,但这并不意味着它实际上是将数据读取到内存中。您可以缓存读取的数据帧,但它仅适用于较小的数据集,因为它也不保证数据不会被驱逐,然后需要重新读取

【讨论】:

以上是关于如何使我的 Spark Accumulator 统计信息在 Azure Databricks 中可靠?的主要内容,如果未能解决你的问题,请参考以下文章

如何转换 Spark 数据框以使我的值成为列名? [复制]

spark Accumulator累加器使用示例

Spark Accumulators

Spark Accumulators

生产常用Spark累加器剖析之二

spark入门知识讲解和基础数据操作编程(统一用scala编程实例)