2
我正在運行emr-5.2.0,並且在S3中存儲了一年的數據,作爲Parquet按日劃分。查詢一個月時,我期望Spark只能將一個月的數據加載到內存中。但是,我的羣集內存使用情況看起來像我正在加載全年的1.7TB數據。Spark&Parquet查詢性能
我假設我可以加載完整數據湖這樣
val lakeDF = spark.sqlContext.read.parquet("s3://mybucket/mylake.parquet")
lakeDF.cache()
lakeDF.registerTempTable("sightings")
而且火花將使用日期查詢,只選擇符合那裏有過濾器,分區。
val leftDF = spark.sql("SELECT * FROM sightings WHERE DATE(day) BETWEEN "2016-01-09" AND "2016-01-10"")
val audienceDF = leftDF.join(ghDF, Seq("gh9"))
audienceDF.select(approxCountDistinct("device_id", red = 0.01).as("distinct"), sum("requests").as("avails")).show()
我很好奇,如果將分區轉換爲DATE導致此問題?
我也一直在使用Athena/PrestoDB在同一數據集上進行一些測試,並且很清楚,只有幾千兆字節的數據正在被掃描。
有沒有什麼辦法讓Spark在提交查詢之前告訴我要裝入多少數據?
您是否嘗試刪除'lakeDF.cache()'語句?你感冒了也研究'df.explain()'在轉換結束時(在調用動作之前)給出的物理計劃,也許這會給你一個提示 –
是'lakeDF.cache()'是問題。 – jspooner