Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用scala,当一个类的末尾有$时,如何比较两个类类型?_Scala_Apache Spark - Fatal编程技术网

使用scala,当一个类的末尾有$时,如何比较两个类类型?

使用scala,当一个类的末尾有$时,如何比较两个类类型?,scala,apache-spark,Scala,Apache Spark,我试图比较SparkSQL查询的类类型 scala> val plan = spark.sessionState.sqlParser.parsePlan("create table some_table as select 1") scala> val childClass = plan.children.map(_.getClass).toList(0) Class[_ <: org.apache.spark.sql.catalyst.plans.log

我试图比较SparkSQL查询的类类型

scala> val plan = spark.sessionState.sqlParser.parsePlan("create table some_table as select 1")
scala> val childClass = plan.children.map(_.getClass).toList(0)

Class[_ <: org.apache.spark.sql.catalyst.plans.logical.LogicalPlan] = class org.apache.spark.sql.catalyst.plans.logical.Project
我认为这里的问题是如何编译org.apache.spark.sql.catalyst.plans.logical.Project类

scala> org.apache.spark.sql.catalyst.plans.logical.Project.getClass
res21: Class[_ <: org.apache.spark.sql.catalyst.plans.logical.Project.type] = class org.apache.spark.sql.catalyst.plans.logical.Project$
末尾的$符号引起了问题。但是,如果我执行childClass.getName并与类进行字符串比较,我会得到true,但我认为这不是进行类比较的好方法

这与其说是Spark问题,不如说是scala问题,而且这个问题看起来很小,但我似乎不知道如何在不比较原始字符串名称的情况下比较类类型。

org.apache.Spark.sql.catalyst.plans.logical.Project.getClass调用伴随对象的getClass方法来org.apache.spark.sql.catalyst.plans.logical.Project是类org.apache.spark.sql.catalyst.plans.logical.Project$的一个单实例在本例中,查看spark的代码可以看出它是一个带有合成伴生对象的case类

您可以通过以下方式获取org.apache.spark.sql.catalyst.plans.logical.Project的类对象:

i、 e


应该是真的。

感谢Levi的清晰解释,它确实帮助我理解了背后的逻辑。不过我还是有点困惑,我在spark代码中没有看到org.apache.spark.sql.catalyst.plans.logical.Project的伴随对象。我只看到一个案例类。您是如何推断getClass引用的是伴生对象的?它是一个case类,因此Scala编译器合成伴生对象主要用于将apply for对象构造为函数方法。
scala> org.apache.spark.sql.catalyst.plans.logical.Project.getClass
res21: Class[_ <: org.apache.spark.sql.catalyst.plans.logical.Project.type] = class org.apache.spark.sql.catalyst.plans.logical.Project$
classOf[org.apache.spark.sql.catalyst.plans.logical.Project]
childClass.getClass == classOf[org.apache.spark.sql.catalyst.plans.logical.Project]