首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在使用动态变量名时,在Sparklyr中加1实际上是加2?

在Sparklyr中使用动态变量名时,加1实际上是加2的原因是因为Sparklyr使用了延迟计算(lazy evaluation)的特性。延迟计算是指Sparklyr在执行代码时并不立即计算表达式的结果,而是将表达式存储为一个待计算的计算图(computational graph),直到真正需要获取结果时才会触发计算。

当使用动态变量名时,例如在Sparklyr中使用dplyr函数进行数据处理时,会使用!!操作符来表示动态变量名。而Sparklyr在解析这个表达式时会执行两次加法操作,导致实际上加了2。

具体地,Sparklyr中的!!操作符会触发两次加法操作。首先,它会将变量名解析为Spark SQL中的列名,并执行一次加法操作。然后,当真正需要获取结果时,Sparklyr会将计算图提交给Spark集群执行,此时Spark会再次执行一次加法操作。

这种行为是由Sparklyr中的设计决策所决定的,目的是为了与Spark的执行模型保持一致,并提供更灵活的表达式编写方式。

如果你希望避免这种加法操作加2的情况,可以使用静态变量名而非动态变量名进行计算,或者通过调整代码逻辑来达到预期的加法操作结果。

(注意:本文中不提及亚马逊AWS、Azure、阿里云、华为云、天翼云、GoDaddy、Namecheap、Google等流行的一些云计算品牌商,无法给出相关产品和产品介绍链接地址。)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

PHP 常量与变量

【常量】       可以用 define() 函数来定义常量,在 PHP 5.3.0 以后,可以使用 const 关键字在类定义之外定义常量。一个常量一旦被定义,就不能再改变或者取消定义。        常量只能包含标量数据(boolean,integer,float 和 string)。可以定义 resource 常量,但应尽量避免,因为会造成不可预料的结果。        可以简单的通过指定其名字来取得常量的值,与变量不同,不应该在常量前面加上 $ 符号。如果常量名是动态的,也可以用函数 constant() 来获取常量的值。用  get_defined_constants() 可以获得所有已定义的常量列表。  如果只想检查是否定义了某常量,用 defined() 函数。  常量和变量有如下不同:  ◦  常量前面没有美元符号($);   ◦  常量只能用 define() 函数定义,而不能通过赋值语句;   ◦  常量可以不用理会变量的作用域而在任何地方定义和访问;   ◦  常量一旦定义就不能被重新定义或者取消定义;   ◦  常量的值只能是标量。  预定义常量

02
  • 【编程基础第十一讲】代码如何写才最漂亮第一篇

    存在问题: 好多小伙伴对编码的格式作用模糊,以为只要完成功能就行,其实这种观点是错误的,一定要重视代码规范,不然你哭的地都找不到。 如何实施: 良好的代码开发习惯对人对己都是非常有用的,良好的代码开发习惯包括,方法封装的独立性,注释添加的合理性,代码布局书写的工整性,当然这些东西没有写的很好也不影响程序的编译与运行,也就是说在初期开发的时候是不受什么影响的,但是对于后期的维护与他人的对你的代码维护就能显示出这方面的重要性了; 今天主要跟大家分享一下一个在程序员这个地方一种公认的书写规范,可以说总结的还是相对

    07
    领券