spark.implicits._ 导入了啥?
Posted
技术标签:
【中文标题】spark.implicits._ 导入了啥?【英文标题】:What is imported with spark.implicits._?spark.implicits._ 导入了什么? 【发布时间】:2018-06-15 15:04:18 【问题描述】:import spark.implicits._
导入了什么? “隐含”是指某个包吗?如果是这样,为什么我在 https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.package 的 Scala Api 文档中找不到它?
【问题讨论】:
【参考方案1】:Scala 允许您将“动态”的东西导入作用域。你也可以这样做:
final case class Greeting(hi: String)
def greet(greeting: Greeting): Unit =
import greeting._ // everything in greeting is now available in scope
println(hi)
SparkSession
实例带有一些隐含,您可以使用 import
语句在您的作用域中导入这些隐含。你得到的最重要的东西是Encoder
s 对DataFrame
s 和Dataset
s 的许多操作所必需的。它还将StringContext
带入了您使用$"column_name"
表示法所必需的范围内。
implicits
成员是SQLImplicits
的一个实例,其源代码(适用于2.3.1 版本)您可以查看here。
【讨论】:
【参考方案2】:通过对象导入是scala的特性,所以api文档没有描述。从 Apache spark 源代码来看,implicits
是 SparkSession
类中的一个对象类。 implicits
类扩展了 SQLImplicits
,如下所示:
object implicits extends org.apache.spark.sql.SQLImplicits with scala.Serializable
。 SQLImplicits
提供了更多功能,例如:
-
将 Scala 对象转换为数据集。 (由 toDS)
将 scala 对象转换为数据框。 (由 toDF 提供)
将“$name”转换为列。
通过导入implicits
到import spark.implicits._
,其中spark
是SparkSession
类型的对象,功能被隐式导入。
【讨论】:
以上是关于spark.implicits._ 导入了啥?的主要内容,如果未能解决你的问题,请参考以下文章
“无法找到存储在数据集中的类型的编码器”,即使 spark.implicits._ 被导入?
一零一一import spark.implicits._写完立即消失