如何使我的 Spark Accumulator 统计信息在 Azure Databricks 中可靠?
How can i make my Spark Accumulator statistics reliable in Azure Databricks?
我正在使用火花累加器来收集每个管道的统计信息。
在典型的管道中,我会读取 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
第一条规则 - 累加器并非 100% 可靠。它们可以更新多次,例如,如果任务是 restarted/retried.
在你的情况下,虽然你读取了一次,但并不意味着数据不会被再次读取。读操作只是获取元数据,如schema,如果对某些数据类型使用inferSchema
,可能会读取数据,但这并不意味着它实际上是将数据读入内存。您可以缓存读取的数据帧,但它只适用于较小的数据集,因为它也不能保证数据不会被驱逐,然后需要重新读取
我正在使用火花累加器来收集每个管道的统计信息。
在典型的管道中,我会读取 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
第一条规则 - 累加器并非 100% 可靠。它们可以更新多次,例如,如果任务是 restarted/retried.
在你的情况下,虽然你读取了一次,但并不意味着数据不会被再次读取。读操作只是获取元数据,如schema,如果对某些数据类型使用inferSchema
,可能会读取数据,但这并不意味着它实际上是将数据读入内存。您可以缓存读取的数据帧,但它只适用于较小的数据集,因为它也不能保证数据不会被驱逐,然后需要重新读取