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 不支持编译时安全性,这限制了你在结构未知时操作数据。