喜欢榜样的人,这里是:
- 创建示例员工数据
case class Employ(name: String, age: Int, id: Int, department: String)
val empData = Seq(Employ("A", 24, 132, "HR"), Employ("B", 26, 131, "Engineering"), Employ("C", 25, 135, "Data Science"))
-
创建数据框和数据集数据
val empRDD = spark.sparkContext.makeRDD(empData)
val empDataFrame = empRDD.toDf()
val empDataset = empRDD.toDS()
让我们执行一个操作:
数据集
val empDatasetResult = empDataset.filter(employ => employ.age > 24)
数据框
val empDatasetResult = empDataframe.filter(employ => employ.age > 24)
//出现错误“值age不是org.apache.spark.sql.Row对象的成员。”
对于 Dataframe,当我们执行 lambda 时,它返回一个 Row 对象而不是 Integer 对象,因此您不能直接执行 employ.age > 24 ,但您可以执行以下操作:
val empDataFrameResult = empDataFrame.filter(employ => employ.getAs[Int]("age") > 24)
为什么数据集那么特别?
谁不喜欢样板代码?让我们使用数据集创建它..
感谢:https://blog.knoldus.com/spark-type-safety-in-dataset-vs-dataframe/