Я пытаюсь создать фрейм данных из файлов json, содержащих месячные сетевые сообщения и получающих ошибки OOM.Инструкция чтения содержит фильтры, которые значительно уменьшат количество записей.
process_df = (spark.read.json(input_file)
.filter((F.col("initiated") == "true")
& ((F.col("dest_port") == "80")
| (F.col("dest_port") == "443"))))
process_df.count()
Я думаю, что, несмотря на ленивую оценку, этот способ реализуется, когда данные считываются в исполнители, а затем фильтр применяется как преобразование при вызове count?Это правильно?
Я попытался обойти проблемы с памятью, добавив
.persist(StorageLevel.DISK_ONLY)
, но это привело к зависанию задания с кучей ошибок rpc.
Я думаю, что мое решение - читать мои данные небольшими порциями, фильтровать и затем объединять.Я действительно пытаюсь понять, правильна ли моя ментальная модель работы Spark.