为什么 Spark 对数据框使用有序模式?

Why Spark uses ordered schema for dataframe?

我想知道为什么 spark 在数据框中使用有序模式而不是使用基于名称的模式,其中如果每个列名称具有相同的类型,则 2 个模式被认为是相同的。

我的第一个问题是,在模式中对列进行排序有什么好处?当我们有这个假设时,它是否会使数据帧上的某些操作更快?

我的第二个问题是我是否可以告诉 spark 列的顺序对我来说并不重要,并且如果无序的列集及其类型相同,则认为两个模式相同。

Spark 数据框不是关系数据库。它为某些类型的处理节省了时间;例如union,这实际上将采用最后一个 DF 中的名称。所以,这是一个实现细节。

因此您不能说顺序对 Spark 无关紧要。请参阅以下的并集:

val df2 = Seq(
  (1, "bat", "done"),
  (2, "mouse", "mone"),
  (3, "horse", "gun"),
  (4, "horse", "some")
).toDF("id", "animal", "talk")

val df = Seq(
  (1, "bat", "done"),
  (2, "mouse", "mone"),
  (3, "horse", "gun"),
  (4, "horse", "some")
).toDF("id", "talk", "animal")

val df3 = df.union(df2)

请注意,使用 JSON 模式推断,一切都是按字母顺序排列的。这对我来说非常方便。