gpt4 book ai didi

r - 找出 2 个表 (`tbl_spark` ) 是否相等而不使用 sparklyr 收集它们

转载 作者:行者123 更新时间:2023-12-04 21:03:56 25 4
gpt4 key购买 nike

考虑在 spark 中有 2 个表或表引用要比较,例如以确保您的备份正常工作。有没有可能在 Spark 中做那个 Remote ?因为使用 collect() 将所有数据复制到 R 是没有用的.

library(sparklyr)
library(dplyr)
library(DBI)

##### create spark connection here
# sc <- spark_connect(<yourcodehere>)
spark_connection(sc)
spark_context(sc)

trees1_tbl <- sdf_copy_to(sc, trees, "trees1")
trees2_tbl <- sdf_copy_to(sc, trees, "trees2")
identical(trees1_tbl, trees2_tbl) # FALSE
identical(collect(trees1_tbl), collect(trees2_tbl)) # TRUE
setequal(trees1_tbl, trees2_tbl) # FALSE
setequal(collect(trees1_tbl), (trees2_tbl)) # TRUE

spark_disconnect(sc)

如果 dplyr::setequal() 就好了可以直接使用。

最佳答案

它只是行不通。这里要记住的要点是 Spark DataFrames * 不是数据容器。有转换的描述,一旦执行管道,将应用于数据。这意味着,每次评估数据时,结果都可能不同。您可以在这里提出的唯一有意义的问题是 DataFrames描述了相同的执行计划,这在您的情况下显然没有用。

那么如何比较数据呢?这里真的没有普遍的答案。

测试

如果它是单元测试的一部分,则收集数据并比较本地对象是要走的路(尽管请记住,使用集合可能会遗漏一些微妙但常见的问题)。

生产

在单元测试之外,您可以尝试检查是否

  • 大小 A 等于大小 B
  • A 除外 B 是 ∅ 和 B 除外 A 是 ∅

  • 然而,这是非常昂贵的,并且如果可行的话可能会显着增加该过程的成本。因此,在实践中,您可能更喜欢不提供严格保证但具有更好性能配置文件的方法。这些将根据输入和输出源以及故障模型而有所不同(例如,基于文件的源比使用数据库或消息队列的源更可靠)。

    在最简单的情况下,您可以使用 Spark Web UI 手动检查基本不变量,例如读取和写入的行数。对于更高级的监控,您可以实现自己的 Spark 监听器(例如检查 Spark: how to get the number of written rows?)、查询监听器或累加器,但所有这些组件都未在 sparklyr 中公开。并且需要编写 native (Scala 或 Java)代码。

    * 我在这里指的是 Spark,但使用 dplyr与数据库后端没有什么不同。

    关于r - 找出 2 个表 (`tbl_spark` ) 是否相等而不使用 sparklyr 收集它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51534782/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com