我有一个大约1 GB的镶木地板文件。每个数据记录是来自IOT设备的读数,其捕获设备在最后一分钟消耗的能量。 架构:houseId,deviceId,energy 镶木地板文件在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如何执行此查询。
答案 0 :(得分:3)
Spark是否在不查看查询的情况下从HDFS读取内存中的整个Parquet文件?
它不应该扫描所有数据文件,但通常可以访问所有文件的元数据。
根据查询,Spark是否只加载HDFS所需的分区?
是的,确实如此。
根据查询,Spark是否只加载HDFS所需的分区?
没有。每个查询都有自己的执行计划。
如果我将df4数据帧缓存在上面会不会影响执行时间?
是的,至少现在,它会有所作为 - Caching dataframes while keeping partitions