Привет знатокам Spark. У меня вопрос. У меня есть файлов CSV (обычная таблица) 400Гб в S3. Я запустил EMR+Spark. Выбрал 4 рабочих ноды r5a.4xlarge (128GB RAM каждый).
В ноутбуке создал data frame
df = spark.read.format("csv").option("header", "true").option("delimiter", '|').load("s3://redshift/intent-CSV/")
а затем создал SQL VIew и написал запрос с фильтром по тексту:
df.createOrReplaceTempView("idataset_csv")
agg_sql = """SELECT *
FROM dataset_csv
WHERE text LIKE '%music%' and locale = 'en_US'
and date between '2020-03-31' and '2020-04-05'
"""
log_aggregates_DF = spark.sql(agg_sql)
log_aggregates_DF.show()Запрос выполнялся не очень быстро 20-40 секунд. Я хочу, чтобы он выполнялся за 1 секунду. Оперативки больше 500Gb. Я еще попробую загрузить Parquet вместо CSV - она весит 50гб вместо 400.
В общем мне нужно SQL запросы но супер быстро, что можно подкрутить? Пишите в коментах, спасибо! А я потом расскажу про кейс и добавлю похожий в курс.
```
df = spark.read.format("csv").option("header", "true").option("delimiter", '|').load("s3://redshift/intent-CSV/")
log_aggregates_DF = df\
.filter("text LIKE '%music%'")\
.filter("locale = 'en_US'")\
.filter("date between '2020-03-31' and '2020-04-05'")\
.cache() # <- кеширование
log_aggregates_DF.show()
```
Ну и да, на паркете возможно будет лучше из-за меньшего объема и колоночной структуры
storage level тут https://spark.apache.org/docs/2.1.2/api/python/_modules/pyspark/storagelevel.html
попробуй все в память