Я выполняю один и тот же запрос к одному и тому же набору данных с одинаковой версией Spark (2.4.0) в двух разных средах - план объяснения включает DataFilters
в вывод в среде Databricks, но не включает его в вывод на мою локальную машину. Я хотел бы понять, что означает опция DataFilters
и почему она выводится непоследовательно.
У меня есть образец набора данных Parquet, который выглядит следующим образом:
parquetDF.show()
+----------+---------+---------+
|first_name|last_name| country|
+----------+---------+---------+
| Ernesto| Guevara|Argentina|
| Vladimir| Putin| Russia|
| Maria|Sharapova| Russia|
| Bruce| Lee| China|
| Jack| Ma| China|
+----------+---------+---------+
Когда я запускаю parquetDF.where($"first_name" === "Maria").explain()
на своем локальном компьютере из консоли Spark, я получаю следующий физический план:
== Physical Plan ==
*(1) Project [first_name#25, last_name#26, country#27]
+- *(1) Filter (isnotnull(first_name#25) && (first_name#25 = Maria))
+- *(1) FileScan parquet [first_name#25,last_name#26,country#27]
Batched: true,
Format: Parquet,
Location: InMemoryFileIndex[file:/Users/powers/Documents/tmp/parquet_blog_data],
PartitionFilters: [],
PushedFilters: [IsNotNull(first_name),
EqualTo(first_name,Maria)],
ReadSchema: struct<first_name:string,last_name:string,country:string>
Когда я выполняю тот же запрос в Databricks (Runtime 5.2) для того же файла в S3, я получаю этот физический план:
== Physical Plan ==
*(1) Project [first_name#259, last_name#260, country#261]
+- *(1) Filter (isnotnull(first_name#259) && (first_name#259 = Maria))
+- *(1) FileScan parquet [first_name#259,last_name#260,country#261]
Batched: true,
DataFilters: [isnotnull(first_name#259), (first_name#259 = Maria)],
Format: Parquet,
Location: InMemoryFileIndex[some_bucket/parquet],
PartitionFilters: [],
PushedFilters: [IsNotNull(first_name),
EqualTo(first_name,Maria)],
ReadSchema: struct<first_name:string,last_name:string,country:string>
Что такое DataFilters
? Эти фильтры применяются на уровне S3? Возможно, эти фильтры применяются перед отправкой данных из S3 в кластер ec2?