Spark Dataframe 解释道
在 Spark 中,DataFrame 是组织到命名列中的分布式数据集合。它在概念上等同于关系数据库中的表或 R / Python 中的数据框,但在引擎盖下具有更丰富的优化。DataFrame 可以从多种来源构建,例如结构化数据文件,Hive 中的表,外部数据库或现有 RDD。
创建 Dataframe 的方法
val data= spark.read.json("path to json")
val df = spark.read.format("com.databricks.spark.csv").load("test.txt")
在选项字段中,你可以提供标题,分隔符,字符集等等
你还可以从 RDD 创建 Dataframe
val rdd = sc.parallelize(
Seq(
("first", Array(2.0, 1.0, 2.1, 5.4)),
("test", Array(1.5, 0.5, 0.9, 3.7)),
("choose", Array(8.0, 2.9, 9.1, 2.5))
)
)
val dfWithoutSchema = spark.createDataFrame(rdd)
如果要使用模式创建 df
def createDataFrame(rowRDD: RDD[Row], schema: StructType): DataFrame
如果 Spark 提供了 RDD,为什么我们需要 Dataframe
RDD 仅仅是一个弹性分布式数据集,它更像是一个无法优化的数据黑盒,因为可以对其执行的操作不受约束。
没有内置的优化引擎:在使用结构化数据时,RDD 无法利用 Spark 的高级优化器,包括催化剂优化器和 Tungsten 执行引擎。开发人员需要根据其属性优化每个 RDD。处理结构化数据:与 Dataframe 和数据集不同,RDD 不会推断摄取数据的模式,并且需要用户指定它。
Spark 中的 DataFrames 通过查询优化器自动优化其执行。在对 DataFrame 进行任何计算之前,Catalyst 优化器会将用于构建 DataFrame 的操作编译为物理计划以供执行。因为优化器理解操作的语义和数据的结构,所以它可以做出明智的决策来加速计算。
DataFrame 的局限性
编译时类型安全:Dataframe API 不支持编译时安全性,这限制了你在结构未知时操作数据。