spark Dataset 中的类型安全是什么意思?

har*_*ran 4 apache-spark apache-spark-sql

我试图了解数据集和数据框之间的区别,并找到了以下有用的链接,但我无法理解类型安全是什么意思?

DataFrame(在 Spark 2.0 中,即 DataSet[Row] )和 Spark 中的 RDD 之间的区别

小智 5

RDD 和数据集是类型安全的意味着编译器知道列和列的数据类型,无论它是 Long、String 等......

但是,在 Dataframe 中,例如,每次调用动作时,collect()它都会将结果作为 Array of Rows 而不是 Long、String 数据类型返回。在数据框中,列有自己的类型,例如整数、字符串,但它们不会向您公开。对你来说,它的任何类型。要将数据行转换为合适的类型,您必须使用.asInstanceOf方法。

例如:在 Scala 中:

scala > :type df.collect()
Array[org.apache.spark.sql.Row]


df.collect().map{ row => 
    val str = row(0).asInstanceOf[String]
    val num = row(1).asInstanceOf[Long]
}                      
Run Code Online (Sandbox Code Playgroud)


小智 1

类型安全是 Spark 2.0 中的一个高级 API。

我们需要这个 API 对数据集中的行执行更复杂的操作。

例如:

departments.joinWith(people, departments("id") === people("deptId"), "left_outer").show
Run Code Online (Sandbox Code Playgroud)