为什么在将任何rdd转换为ds而不是常规导入之前嵌入了spark.implicits._? [重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我正在学习火花数据集并检查我们如何将rdd转换为数据集。

为此,我得到以下代码:

val spark = SparkSession
      .builder
      .appName("SparkSQL")
      .master("local[*]")
      .getOrCreate()

    val lines = spark.sparkContext.textFile("../myfile.csv")
    val structuredData = lines.map(mapperToConvertToStructureData)

    import spark.implicits._
    val someDataset = structuredData.toDS

这里,如果我们想将rdd转换为数据集,我们需要在转换之前导入spark.implicits._。

为什么要在转换之前编写?我们可以像在文件顶部那样使用此导入作为常规导入吗?

scala apache-spark apache-spark-sql implicit apache-spark-dataset
2个回答
4
投票

这里spark在类org.apache.spark.sql.SparkSession的实例中,因此实例必须在从它导入之前存在。


0
投票

使用数据集需要Spark implicits,因为它是找到编码器所需的所有隐式函数和类的地方。所有数据集转换都需要编码器。看一下文档,您将在所有数据集转换中看到,您有一个“A : Encoder”绑定或一个隐含的编码器。

在scala中通常这个含义在{objects}中但是在spark中它们在sparkSession class中,所以在你没有实例之前,你不能导入它们。

© www.soinside.com 2019 - 2024. All rights reserved.