DataFilters в Spark объясняют физические планы в Databricks, но не на локальной машине - PullRequest
0 голосов
/ 30 апреля 2019

Я выполняю один и тот же запрос к одному и тому же набору данных с одинаковой версией 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...