【发布时间】:2018-10-30 12:22:00
【问题描述】:
鉴于 Avro 和 Parquet 文件包含数据和该数据的模式,那么在 Spark 中,应该可以将这些文件作为 Dataset 而不是 DataFrame 读取。但是我看到的所有来源都将这些文件作为 DataFrame 读取,无论如何我都找不到将这些文件作为 Dataset 读取。
有人知道如何将这些文件作为数据集读取吗?
【问题讨论】:
-
DataFrame是Dataset(准确地说是Dataset[Row])。 -
是的,但真正的数据集知道每一列的类型。而 DataFrame 不知道每个字段的类型是什么;它只知道它拥有一个 Rows 集合。
-
这不是真的。在这两种情况下,
Dataset“知道”关于列类型的信息量完全相同。这就是特别允许 Catalyst 优化的原因。区别在于它可以向编译器提供多少信息。 -
不,不是。你应该回去阅读基础知识。进行区分是有原因的,原因是在 DataFrame 中,每一行都被视为一个行,而不是构成行的字段。使用纯数据集,Spark 可以执行更好的优化。
-
用“纯数据集”(意思是
DataFrame/SQL API 之外)Spark 可以申请fewer optimizations。 “二进制”Encoders是唯一的性能改进(与RowEncoder相比)。此外,表示不会改变。如果您有ds: Dataset[Row]和子ds.as[T]: Dataset[T],则内部存储保持完全相同。
标签: apache-spark dataset apache-spark-sql avro parquet