如何在Scala Spark中访问用于调试目的的类型签名
从spark shell运行spark时,当创建每个已定义变量时,shell将打印该变量的类型签名以及实例的toString 如何通过编程方式生成相同的签名,而不使用shell进行调试,从而从spark脚本或类生成日志或stdout/stderr 在spark shell中运行的示例代码请参见下面的粗体输出 代码: 在spark shell中运行的代码请参见以下输出:我想从api生成该代码: 我希望在日志或输出中生成的示例类型信息: 数组[字符串] org.apache.spark.rdd.rdd[String] org.apache.spark.rdd.rdd[String,Int] 您可以使用此getClass.getSimpleName获取日志记录的可读名称,例如:如何在Scala Spark中访问用于调试目的的类型签名,scala,apache-spark,Scala,Apache Spark,从spark shell运行spark时,当创建每个已定义变量时,shell将打印该变量的类型签名以及实例的toString 如何通过编程方式生成相同的签名,而不使用shell进行调试,从而从spark脚本或类生成日志或stdout/stderr 在spark shell中运行的示例代码请参见下面的粗体输出 代码: 在spark shell中运行的代码请参见以下输出:我想从api生成该代码: 我希望在日志或输出中生成的示例类型信息: 数组[字符串] org.apache.spark.rdd.rd
val data = Array("one", "two", "three", "two", "three", "three")
print(data.getClass.getSimpleName) // Output: String[]
此外,如果使用intelliJ,只需使用command+p检查变量的类型 你的问题对我来说很难理解,因为它意味着你需要等到运行时才能看到你有什么。在Scala这样的静态类型语言中,情况并非如此。如有必要,您可以使用IDE自己显式地键入值,并在编译时准确地查看您拥有的内容
因此,如果您只关心类型,那么您已经介绍了Scala语言以及您的IDE来帮助您进行推理。但是,RDD还提供了toDebugString方法,该方法描述RDD及其依赖关系。这对于调试非常有用,特别是在识别您正在处理的特定类型的RDD时。但是它不会告诉您所包含的类型,因为您已经知道了。虽然其他答案正确地说这通常是不必要的,但您可以这样做:
import scala.reflect.runtime.universe._
def typeName[A](x: => A)(implicit tag: WeakTypeTag[A]) = tag.toString
By name parameter=>A确保可以安全地调用它,例如在foox、bary上调用,而不实际计算bar或foo,或者在惰性值上调用。有关TypeTags的更多信息,请参阅
val data = Array("one", "two", "three", "two", "three", "three")
print(data.getClass.getSimpleName) // Output: String[]
import scala.reflect.runtime.universe._
def typeName[A](x: => A)(implicit tag: WeakTypeTag[A]) = tag.toString