Я запускаю процесс Pyspark, который работает без проблем. Первым шагом процесса является применение указанного c UDF к кадру данных. Это функция:
import html2text
class Udfs(object):
def __init__(self):
self.h2t = html2text.HTML2Text()
self.h2t.ignore_links = True
self.h2t.ignore_images = True
def extract_text(self, raw_text):
try:
texto = self.h2t.handle(raw_text)
except:
texto = "PARSE HTML ERROR"
return texto
Вот как я применяю UDF:
import pyspark.sql.functions as f
import pyspark.sql.types as t
from udfs import Udfs
udfs = Udfs()
extract_text_udf = f.udf(udfs.extract_text, t.StringType())
df = df.withColumn("texto", extract_text_udf("html_raw"))
Он обрабатывает приблизительно 29 миллионов строк и 300 ГБ. Проблема в том, что для выполнения некоторых задач требуется слишком много времени. Среднее время выполнения задач:
Другие задачи выполнены с продолжительностью более 1 часа.
Но некоторые задачи обработка занимает слишком много времени:
Процесс выполняется в AWS с EMR в кластере с 100 узлами, каждый узел с 32 ГБ ОЗУ и 4 процессора. Также включается спекуляция.
Где проблема с этими задачами? Это проблема с UDF? Это проблема с нитками?