什么是用 spark.implicits._ 导入的?

Joe*_*Joe 4 apache-spark

什么是进口的import spark.implicits._?“隐含”是指某个包吗?如果是这样,为什么我在https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.package的 Scala Api 文档中找不到它?

ste*_*ino 6

Scala 允许您将“动态”的东西导入作用域。你也可以这样做:

final case class Greeting(hi: String)

def greet(greeting: Greeting): Unit = {
  import greeting._ // everything in greeting is now available in scope
  println(hi)
}
Run Code Online (Sandbox Code Playgroud)

SparkSession实例带有一些您使用该import语句导入到您的范围内的隐式。你得到的最重要的东西是EncoderDataFrames 和Datasets进行大量操作所必需的s。它还将StringContext您使用$"column_name"符号所必需的范围纳入范围。

implicits成员是 的一个实例SQLImplicits,其源代码(适用于 2.3.1 版)您可以在此处查看。


Md *_*din 6

通过对象导入是scala的特性,所以api文档中没有对此进行描述。从Apache Spark源代码来看,implicits是一个对象类里面的SparkSession类。该类implicits已扩展SQLImplicits如下: object implicits extends org.apache.spark.sql.SQLImplicits with scala.Serializable。它SQLImplicits提供了更多功能,例如:

  1. 将 scala 对象转换为数据集。(由 toDS 提供)
  2. 将 scala 对象转换为数据帧。(由 toDF 提供)
  3. 将“$name”转换为列。

implicits通过通过import spark.implicits._where sparkis导入SparkSession类型对象,可以隐式导入功能。