nac*_*hti 5 r dataframe dplyr apache-spark sparklyr
考虑在spark中有2个表或表引用要比较,例如,以确保备份正常工作.是否有可能在火花中做那个遥控?因为使用将所有数据复制到R没有用collect().
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)
Run Code Online (Sandbox Code Playgroud)
会很好,如果dplyr::setequal()可以直接使用.
这是行不通的。这里要记住的要点是 Spark DataFrames* 不是数据容器。一旦执行管道,就会对数据应用转换的描述。这意味着,每次评估数据时结果都可能不同。您在这里可以问的唯一有意义的问题是两者是否DataFrames描述相同的执行计划,这显然对您的情况没有用。
那么如何比较数据呢?这里确实没有普遍的答案。
\n\n测试
\n\n如果它是单元测试的一部分,则收集数据并比较本地对象是可行的方法(尽管请记住,使用集合可能会错过一些微妙但常见的问题)。
\n\n生产
\n\n外部单元测试你可以尝试检查是否
\n\n然而,这是非常昂贵的,并且如果可行的话可能会显着增加该过程的成本。因此,在实践中,您可能更喜欢不提供严格保证但具有更好性能的方法。这些将根据输入和输出源以及故障模型而有所不同(例如,基于文件的源比使用数据库或消息队列的源更可靠)。
\n\n在最简单的情况下,您可以使用 Spark Web UI 手动检查基本不变量,例如读取和写入的行数。对于更高级的监控,您可以实现自己的 Spark 侦听器(例如Spark:如何获取写入的行数?)、查询侦听器或累加器,但所有这些组件都不会在sparklyr并且需要编写本机(Scala 或Java)代码。
* 我在这里指的是 Spark,但是使用dplyr与数据库后端一起使用并没有那么不同。
| 归档时间: |
|
| 查看次数: |
242 次 |
| 最近记录: |