为什么scala.beans.beanproperty在Spark中的工作方式有所不同

波尔多波尔多

在scala REPL中,以下代码

import scala.beans.BeanProperty

class EmailAccount {
  @scala.beans.BeanProperty var accountName: String = null

  override def toString: String = {
    return s"acct ($accountName)"
  }
}
classOf[EmailAccount].getDeclaredConstructor()

结果是

res0: java.lang.reflect.Constructor[EmailAccount] = public EmailAccount()

但是在Spark的REPL中我得到了

java.lang.NoSuchMethodException: EmailAccount.<init>()
  at java.lang.Class.getConstructor0(Class.java:2810)
  at java.lang.Class.getDeclaredConstructor(Class.java:2053)
  ... 48 elided

是什么原因导致这种差异?如何获得火花以匹配火花壳的行为。

我像这样启动REPL:

/home/placey/Downloads/spark-2.0.0-bin-hadoop2.7/bin/spark-shell --master local --jars /home/placey/snakeyaml-1.17.jar

scala -classpath "/home/placey/snakeyaml-1.17.jar

Scala版本很引人注目:

Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_55)

标量:

Welcome to Scala version 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_55).
PawełBartkiewicz

实际上,这不是特定于scala.beans.BeanPropertySpark的。通过使用-Yrepl-class-based参数运行它,您可以在标准Scala REPL中获得相同的行为

scala -Yrepl-class-based

现在,让我们尝试定义一个简单的空类:

scala> class Foo()
defined class Foo

scala> classOf[Foo].getConstructors
res0: Array[java.lang.reflect.Constructor[_]] = Array(public Foo($iw))

scala> classOf[Foo].getFields
res1: Array[java.lang.reflect.Field] = Array(public final $iw Foo.$outer)

如您所见,REPL通过向构造函数添加其他字段和参数来动态修改您的类。为什么?

每当在Scala REPL中创建avalvarScala REPL时,它都会被包装在一个特殊的对象中,因为在Scala中没有“全局变量”之类的东西。看到这个答案

通常,这是一个对象,因此全局可用。但是,-Yrepl-class-basedREPL使用类实例而不是单个全局对象。Spark开发人员引入了此功能,因为Spark需要将类可序列化,以便可以将它们发送到远程工作程序(请参阅此pull request)。

因此,您在REPL中定义的任何类都需要获取$iw实例。否则,您将无法访问在REPL中定义的globalvalvar此外,生成的类会自动扩展Serializable

恐怕你无能为力默认情况下spark-shell启用-Yrepl-class-based即使可以禁用此行为,您也会遇到许多其他问题,因为您的类将不再可序列化,但是Spark需要对其进行序列化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从管道读取时,为什么“ sed q”的工作方式有所不同?

来自分类Dev

为什么在Firefox,Chrome和IE中,这种方法的工作方式有所不同?

来自分类Dev

为什么在irb中对顶级方法的处理方式有所不同?

来自分类Dev

为什么在Firefox,Chrome和IE中这种方法工作有所不同?

来自分类Dev

为什么JAVA中的重载工作与C ++有所不同?

来自分类Dev

为什么GradientPaint在MAC OS上的Java 6和Java 7/8中绘制方式有所不同

来自分类Dev

为什么python在Ubuntu和MacOS上解析日期的方式有所不同?

来自分类Dev

为什么GCC对这些摘要的处理方式有所不同?

来自分类Dev

为什么Ejabberd处理PUT和POST请求的方式有所不同?

来自分类Dev

为什么numpy导入的行为有所不同?

来自分类Dev

为什么groupby操作的行为有所不同

来自分类Dev

为什么hide()的行为有所不同?

来自分类Dev

为什么to_sym的行为有所不同?

来自分类Dev

在这些示例中,为什么“ last”在Perl中的行为有所不同?

来自分类Dev

在这些示例中,为什么“ last”在Perl中的行为有所不同?

来自分类Dev

为什么单个元素哈希表在Powershell中的行为有所不同?

来自分类Dev

为什么OOP中的静态类的最佳实践会有所不同?

来自分类Dev

为什么在Dom对象中为其分配变量会有所不同

来自分类Dev

为什么NumberFormatInfo在Azure环境中的行为有所不同?

来自分类Dev

为什么在此示例中,“ grep”的行为有所不同?

来自分类Dev

<|>在Parsec中-为什么这些示例的行为有所不同?

来自分类Dev

为什么.NET中的n层与其他语言相比有所不同

来自分类Dev

当类中的counter较大时,为什么java线程的行为会有所不同?

来自分类Dev

为什么我的html中的类顺序会有所不同?

来自分类Dev

为什么回显$?在此脚本中运行时是否有所不同?

来自分类Dev

为什么在Dom对象中为其分配变量会有所不同

来自分类Dev

CSS动画在Chrome中的工作方式有所不同

来自分类Dev

Linux,Unix,Solaris中的线程工作方式是否有所不同

来自分类Dev

$()在Internet Explorer中的工作方式是否有所不同?

Related 相关文章

  1. 1

    从管道读取时,为什么“ sed q”的工作方式有所不同?

  2. 2

    为什么在Firefox,Chrome和IE中,这种方法的工作方式有所不同?

  3. 3

    为什么在irb中对顶级方法的处理方式有所不同?

  4. 4

    为什么在Firefox,Chrome和IE中这种方法工作有所不同?

  5. 5

    为什么JAVA中的重载工作与C ++有所不同?

  6. 6

    为什么GradientPaint在MAC OS上的Java 6和Java 7/8中绘制方式有所不同

  7. 7

    为什么python在Ubuntu和MacOS上解析日期的方式有所不同?

  8. 8

    为什么GCC对这些摘要的处理方式有所不同?

  9. 9

    为什么Ejabberd处理PUT和POST请求的方式有所不同?

  10. 10

    为什么numpy导入的行为有所不同?

  11. 11

    为什么groupby操作的行为有所不同

  12. 12

    为什么hide()的行为有所不同?

  13. 13

    为什么to_sym的行为有所不同?

  14. 14

    在这些示例中,为什么“ last”在Perl中的行为有所不同?

  15. 15

    在这些示例中,为什么“ last”在Perl中的行为有所不同?

  16. 16

    为什么单个元素哈希表在Powershell中的行为有所不同?

  17. 17

    为什么OOP中的静态类的最佳实践会有所不同?

  18. 18

    为什么在Dom对象中为其分配变量会有所不同

  19. 19

    为什么NumberFormatInfo在Azure环境中的行为有所不同?

  20. 20

    为什么在此示例中,“ grep”的行为有所不同?

  21. 21

    <|>在Parsec中-为什么这些示例的行为有所不同?

  22. 22

    为什么.NET中的n层与其他语言相比有所不同

  23. 23

    当类中的counter较大时,为什么java线程的行为会有所不同?

  24. 24

    为什么我的html中的类顺序会有所不同?

  25. 25

    为什么回显$?在此脚本中运行时是否有所不同?

  26. 26

    为什么在Dom对象中为其分配变量会有所不同

  27. 27

    CSS动画在Chrome中的工作方式有所不同

  28. 28

    Linux,Unix,Solaris中的线程工作方式是否有所不同

  29. 29

    $()在Internet Explorer中的工作方式是否有所不同?

热门标签

归档