dplyr::copy_to 和 sparklyr::sdf_copy_to 有啥区别?
Posted
技术标签:
【中文标题】dplyr::copy_to 和 sparklyr::sdf_copy_to 有啥区别?【英文标题】:what is the difference between dplyr::copy_to and sparklyr::sdf_copy_to?dplyr::copy_to 和 sparklyr::sdf_copy_to 有什么区别? 【发布时间】:2019-10-02 13:37:51 【问题描述】:我正在使用 sparklyr 库与“spark”进行交互。有一些函数可以将数据框放入 spark 上下文中。此类函数为“dplyr::copy_to
”和“sparklyr::sdf_copy_to
”。有什么区别以及何时建议使用其中一种而不是另一种?
【问题讨论】:
sparklyr
one 是为 spark 数据帧实现的(遵循分布式环境中的 RDD 概念),而dplyr
适用于 R 数据帧、小标题等......这就是你在问?我不太确定
这回答了我问题的第一部分第二部分是:它们的表现是否相同?如果“是”,在什么情况下使用一种而不是另一种更好?
你不能使用其中一个或另一个。您不能在 spark 环境中使用 dplyr::copy_to
,除非您将数据帧从 RDD 收集到 R 数据帧。反之亦然 sparklyr
那么如果有两个dataframe,我想复制到spark环境,那它们之间绝对没有区别?我期望的东西是:sparklyr 版本更有效,或者以这种方式......
如果您的数据框足够小,可以在本地处理(或不分发),那么dplyr
会更有效率。 Spark 的问题在于,如果您的数据集足够大,可以在分布式环境中进行分析,那么它的效率会更高。因此,如果您尝试对小型数据集进行任何类型的分析,那么在本地使用 dplyr
或任何其他 R 按照惯例在本地进行分析会更有效
【参考方案1】:
它们是一样的。我会使用copy_to
而不是专家sdf_copy_to
,因为它与其他数据源更一致,但这是风格。
函数copy_to
是dplyr
的泛型,适用于任何实现dplyr
后端的数据源。
您可以将它与火花连接一起使用,因为sparklyr
实现了copy_to.src_spark
和copy_to.spark_connection
。它们不会暴露给用户,因为您应该使用 copy_to
并让它分派到正确的方法。
copy_to.src_sparck
只是调用copy_to.spark_connection
:
#> sparklyr:::copy_to.src_spark
function (dest, df, name, overwrite, ...)
copy_to(spark_connection(dest), df, name, ...)
<bytecode: 0x5646b227a9d0>
<environment: namespace:sparklyr>
copy_to.spark_connection
只是调用sdf_copy_to
:
#> sparklyr:::copy_to.spark_connection
function (dest, df, name = spark_table_name(substitute(df)),
overwrite = FALSE, memory = TRUE, repartition = 0L, ...)
sdf_copy_to(dest, df, name, memory, repartition, overwrite,
...)
<bytecode: 0x5646b21ef120>
<environment: namespace:sparklyr>
sdf_copy_to
遵循包范围的约定,即在与 Spark DataFrames 相关的函数前加上 "sdf_"
前缀。另一方面,copy_to
来自dplyr
,sparklyr
提供了兼容的方法,方便dplyr
用户使用。
【讨论】:
以上是关于dplyr::copy_to 和 sparklyr::sdf_copy_to 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
将大型数据集缓存到 spark 内存中时“超出 GC 开销限制”(通过 sparklyr 和 RStudio)