当 Apache spark 具有惰性评估时,数据集 运行 在编译时如何

how does dataset run at compile time, when Apache spark has lazy evaluation

我可以看到 Dataset 会在编译期间告诉您该列是否存在。 如果 Spark 有惰性求值, 在 运行 时间 运行 的操作命令之前,它如何获取数据的模式。

如果我的上述理解有误,请告诉我。

运行时和编译时是有区别的。运行时是惰性评估。 (Spark 不会将数据填充到设计的 类 中,直到它必须这样做。)

在编译时,由于强类型,spark 可以检测数据是否与您提供的“必须”匹配列的 类 匹配。这不会阻止您输入可能会导致运行时错误的“string SQL”。 (这实际上就是为什么不鼓励使用“String SQL”并鼓励以编程方式访问数据集的原因。)

example 创建数据集的典型方式:

case class Person (name: String, age: Long)
val ds = spark.read.json("/databricks-datasets/samples/people/people.json").as[Person]
上面示例中的

ds 没有出现强类型,但确实如此。您必须像 Person 数据集一样与 ds 进行交互。编译器可以确保你这样做,并强制执行使你符合 Person Class 的编码实践。弱类型语言无法做到这一点,因为它无法推断类型。 Scala/Spark 看起来是弱类型的,因为它使用了很多推理,但这些推理是强执行的。