Spark SQL 如何读取 Parquet 分区文件
How Spark SQL reads Parquet partitioned files
我有一个大约 1 GB 的镶木地板文件。每条数据记录都是来自物联网设备的读数,它捕获设备在最后一分钟内消耗的能量。
模式:houseId、deviceId、能量
parquet 文件根据 houseId 和 deviceId 进行分区。文件仅包含最近 24 小时的数据。
我想使用 Spark 对驻留在这个镶木地板文件中的数据执行一些查询SQL一个示例查询找出给定房屋在过去 24 小时内每台设备消耗的平均能源。
Dataset<Row> df4 = ss.read().parquet("/readings.parquet");
df4.as(encoder).registerTempTable("deviceReadings");
ss.sql("Select avg(energy) from deviceReadings where houseId=3123).show();
以上代码运行良好。我想了解 spark 如何执行此查询。
- Spark 是否在不查看查询的情况下从 HDFS 读取内存中的整个 Parquet 文件? (我不相信会是这样)
- Spark 是否仅根据查询从 HDFS 加载所需的分区?
- 如果有多个查询需要执行怎么办? Spark 在准备执行计划时会查看多个查询吗?一个查询可能只处理一个分区,而第二个查询可能需要所有分区,因此合并计划应将整个文件从磁盘加载到内存中(如果内存限制允许的话)。
- 如果我在上面缓存 df4 数据帧,执行时间会有所不同吗?
Does Spark read the whole Parquet file in memory from HDFS without looking at the query?
它不应该扫描所有数据文件,但通常它可能会访问所有文件的元数据。
Does Spark load only the required partitions from HDFS as per the query?
是的,确实如此。
Does Spark load only the required partitions from HDFS as per the query?
没有。每个查询都有自己的执行计划。
Will it make a difference in execution time if I cache df4 dataframe above?
是的,至少现在,它会有所作为 - Caching dataframes while keeping partitions
我有一个大约 1 GB 的镶木地板文件。每条数据记录都是来自物联网设备的读数,它捕获设备在最后一分钟内消耗的能量。 模式:houseId、deviceId、能量 parquet 文件根据 houseId 和 deviceId 进行分区。文件仅包含最近 24 小时的数据。
我想使用 Spark 对驻留在这个镶木地板文件中的数据执行一些查询SQL一个示例查询找出给定房屋在过去 24 小时内每台设备消耗的平均能源。
Dataset<Row> df4 = ss.read().parquet("/readings.parquet");
df4.as(encoder).registerTempTable("deviceReadings");
ss.sql("Select avg(energy) from deviceReadings where houseId=3123).show();
以上代码运行良好。我想了解 spark 如何执行此查询。
- Spark 是否在不查看查询的情况下从 HDFS 读取内存中的整个 Parquet 文件? (我不相信会是这样)
- Spark 是否仅根据查询从 HDFS 加载所需的分区?
- 如果有多个查询需要执行怎么办? Spark 在准备执行计划时会查看多个查询吗?一个查询可能只处理一个分区,而第二个查询可能需要所有分区,因此合并计划应将整个文件从磁盘加载到内存中(如果内存限制允许的话)。
- 如果我在上面缓存 df4 数据帧,执行时间会有所不同吗?
Does Spark read the whole Parquet file in memory from HDFS without looking at the query?
它不应该扫描所有数据文件,但通常它可能会访问所有文件的元数据。
Does Spark load only the required partitions from HDFS as per the query?
是的,确实如此。
Does Spark load only the required partitions from HDFS as per the query?
没有。每个查询都有自己的执行计划。
Will it make a difference in execution time if I cache df4 dataframe above?
是的,至少现在,它会有所作为 - Caching dataframes while keeping partitions