如何使我的 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 中可靠?的主要内容,如果未能解决你的问题,请参考以下文章