我讀到 Spark 只檢索需要的資料,但是如何使用 Scala 進行檢查?我正在使用 Scala 將資料從 ES 索引加載到 Spark DF。并且只需要選擇需要的欄位,如果我使用這個:
val indexData = sparkSession.read
.format("es")
.option("scroll.limit", 100000)
.load(index)
.select("country")
spark會加載記錄的所有欄位,然后選擇“國家”還是先選擇“國家”,然后再加載資料?
uj5u.com熱心網友回復:
您可以檢查“模式下推”(僅從源加載選擇列)在物理查詢計劃中是否有效。
以這個簡單的代碼片段為例,并在您的本地機器上運行它:
import org.apache.spark.sql._
object App {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession.builder().appName("test").master("local[*]").getOrCreate()
import spark.implicits._
Seq((1,"aa"),(2,"bb"),(3, "cc")).toDF("id", "value").write.mode("overwrite").parquet("tmp_data")
val df = spark.read.parquet("tmp_data").select("id")
df.explain
}
}
輸出應該類似于:
== Physical Plan ==
*(1) ColumnarToRow
- FileScan parquet [id#13] Batched: true, DataFilters: [], Format: Parquet, Location: InMemoryFileIndex[file:/home/gabriel/IdeaProjects/SparkTests/tmp_data], PartitionFilters: [], PushedFilters: [], ReadSchema: struct<id:int>
根據ReadSchema: struct<id:int>你可以看到只有id列的資料是從源加載的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/312799.html
