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 语句在您的作用域中导入这些隐含。你得到的最重要的东西是Encoders 对DataFrames 和Datasets 的许多操作所必需的。它还将StringContext 带入了您使用$"column_name" 表示法所必需的范围内。

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

【讨论】:

【参考方案2】:

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

    将 Scala 对象转换为数据集。 (由 toDS) 将 scala 对象转换为数据框。 (由 toDF 提供) 将“$name”转换为列。

通过导入implicitsimport spark.implicits._,其中sparkSparkSession 类型的对象,功能被隐式导入。

【讨论】:

以上是关于spark.implicits._ 导入了啥?的主要内容,如果未能解决你的问题,请参考以下文章

“无法找到存储在数据集中的类型的编码器”,即使 spark.implicits._ 被导入?

一零一一import spark.implicits._写完立即消失

Spark scala 模拟 spark.implicits 用于单元测试

Spark Scala 程序中的隐含功能不起作用

scala spark dataframe 修改字段类型

关于在 Xcode 上导入 Alamofire,我是不是遗漏了啥?