У меня есть набор данных JSON в AWS S3 - скажем, по 100 КБ файлов, каждый размером около 5 МБ - и я использую Spark 2.2 DataFrameReader
для чтения и обработки их с помощью:
sparkSession.read.json(...)
Я обнаружил, что Spark просто зависнет на 5 минут или около того, прежде чем начинать вычисления.Это может занять несколько часов для больших наборов данных.Когда я говорю «зависание», я имею в виду, что терминальная визуализация, показывающая, на какой стадии работает кластер и как далеко он продвигается, не появляется - насколько я могу судить, она как-то находится между этапами.
Что Спарк делает в этот период и как я могу помочь ему ускориться?
У меня было две идеи, но обе они кажутся неправильными.
МойПервой идеей было то, что Spark пытается перечислить все файлы, которые ему понадобятся для вычисления.Я проверил это, фактически создав список файлов в автономном режиме и передав их в Spark напрямую, а не используя синтаксис glob:
val fileList = loadFiles()
sparkSession.read.json(fileList:_*)
Это фактически заставляло период "зависания" длиться дольше!
Моя вторая идея заключалась в том, что Spark использует это время для создания схемы для всех данных.Но я исключил это, вручную указав схему:
val schema = createSchema()
sparksession.read.schema(schema).json(...)
Здесь период "зависания" был таким же, как и раньше, хотя в целом вычисления были намного быстрее.
Так что я не совсем уверен, что происходит или как его диагностировать.Кто-нибудь еще сталкивался с этим?