gpt4 book ai didi

apache-spark - Spark SQL 如何读取 Parquet 分区文件

转载 作者:行者123 更新时间:2023-12-04 05:04:17 26 4
gpt4 key购买 nike

我有一个大约 1 GB 的 Parquet 文件。每个数据记录都是来自 IOT 设备的读数,它捕获设备在过去一分钟内消耗的能量。
架构:houseId、deviceId、能源
Parquet 文件根据 houseId 和 deviceId 进行分区。一个文件只包含过去 24 小时的数据。

我想使用 Spark SQL 对驻留在此 Parquet 文件中的数据执行一些查询示例查询找出给定房屋在过去 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

    关于apache-spark - Spark SQL 如何读取 Parquet 分区文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49992952/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com