Как прочитать последний раздел в Apache Spark - PullRequest
0 голосов
/ 10 июля 2019

У меня есть использованный фрейм данных, который содержит запрос

df : Dataframe =spark.sql(s"show Partitions $yourtablename")

Теперь количество разделов меняется каждый день, так как оно запускается каждый день.

Основная проблема в том, что мне нужно получить последний раздел.

Предположим, я получаю раздел для случайной таблицы на определенный день как

year=2019/month=1/day=1
year=2019/month=1/day=10
year=2019/month=1/day=2
year=2019/month=1/day=21
year=2019/month=1/day=22
year=2019/month=1/day=23
year=2019/month=1/day=24
year=2019/month=1/day=25
year=2019/month=1/day=26
year=2019/month=2/day=27
year=2019/month=2/day=3

Теперь вы можете увидеть функциональность, которая сортирует раздел так, что после day=1 приходит day=10. Это создает проблему, так как мне нужно получить последний раздел.

Мне удалось получить раздел с помощью

val df =dff.orderby(col("partition").desc.limit(1)

но это дает мне раздел хвоста -1, а не последний раздел.

Как я могу получить последний раздел из таблиц, преодолевающий ограничение ульев на размещение разделов?

Итак, предположим, что в приведенном выше примере мне нужно забрать

 year=2019/month=2/day=27

а не

year=2019/month=2/day=3

, который является последним разделом в таблице.

1 Ответ

0 голосов
/ 10 июля 2019

Я бы не стал полагаться на позиционную зависимость, но если бы вы это сделали, у меня был бы год = 2019 / месяц = ​​2 / день = 0 3.

Я бы полагался на сокращение разделов и SQL через оператор SQL. Я не уверен, используете ли вы ORC, PARQUET и т. Д., Но обрезка разделов должна быть уместной.

например.

 val df = sparkSession.sql(""" select max(partition_col)
                                 from randomtable 
                           """)

 val maxVal = df.first().getString(0) // this as sql reuslt is a DF

См. Также https://mapr.com/blog/tips-and-best-practices-to-take-advantage-of-spark-2-x/

...