У меня есть фрейм данных PySpark с формой (1e10, 14)
, и я хотел бы отфильтровать его с помощью примерно 50 составных операторов OR, т.е.:
sql_string = "
(col1='val1' and col2=5) or
(col1='val2' and col2=7) or
(col1='val3' and col2=5) or
...
"
df_f = df.filter(sql_string)
df_f.limit(1000).show()
Если число этих отдельных операторов OR составляет <10 , Spark Jobs для метода show создаются мгновенно. <br>Однако, с примерно 15 операционными процессами, для создания Spark Jobs уже требуется около 30 секунд.
И примерно при 20 OR, время для создания любых Spark Jobs увеличивается неуправляемый (более часа).
Начиная примерно с 15 OR, G C Сообщения о распределении отображаются каждые несколько секунд, т.е. на. Похоже на проблему, когда один переходит на Spark Dataframes?
Драйвер имеет 32 ГБ ОЗУ (используется 10 ГБ) и 4 ядра (1 ядро используется 100%, другие около 0%). Ввод / вывод практически равен нулю.
Хотя на одном ядре используется 100%, кластер считает его неактивным, поскольку он завершает работу после установленного мной времени бездействия.
Вот ссылка на план выполнения: https://pastebin.com/7MEv5Sq2.