这个问题在这里已有答案:
我正在学习火花数据集并检查我们如何将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._。
为什么要在转换之前编写?我们可以像在文件顶部那样使用此导入作为常规导入吗?
这里spark
在类org.apache.spark.sql.SparkSession
的实例中,因此实例必须在从它导入之前存在。
使用数据集需要Spark implicits,因为它是找到编码器所需的所有隐式函数和类的地方。所有数据集转换都需要编码器。看一下文档,您将在所有数据集转换中看到,您有一个“A : Encoder
”绑定或一个隐含的编码器。
在scala中通常这个含义在{objects}中但是在spark中它们在sparkSession
class
中,所以在你没有实例之前,你不能导入它们。