Почему я получаю исключение при использовании подсказки Range Join? - PullRequest
1 голос
/ 21 мая 2019

Я пытаюсь использовать метод DataFrame.hint () для добавления подсказки Range Join к моему соединению.

У меня есть две таблицы: minutes и events.

В таблице минут есть столбцы minute_start и minute_end, которые представляют собой время в секундах с фиксированного момента времени.Естественно, их значения кратны 60.

Таблица событий имеет похожие столбцы event_start и event_end, только для событий.События могут начинаться и заканчиваться в любую секунду.

Для каждого события мне нужно найти все минуты, с которыми оно перекрывается.

Я пробую это на Databricks (время выполнения 5.1, Python 3.5):

# from pyspark.sql.types import StructType, StructField, IntegerType

# minutes = spark.sparkContext\
#                .parallelize(((0,  60),
#                              (60, 120)))\
#                .toDF(StructType([
#                          StructField('minute_start', IntegerType()),
#                          StructField('minute_end', IntegerType())
#                        ]))

# events = spark.sparkContext\
#               .parallelize(((12, 33),
#                             (0,  120),
#                             (33, 72),
#                             (65, 178)))\
#               .toDF(StructType([
#                         StructField('event_start', IntegerType()),
#                         StructField('event_end', IntegerType())
#                       ]))

events.hint("range_join", "60")\
      .join(minutes,
            on=[events.event_start   < minutes.minute_end,
                minutes.minute_start < events.event_end])\
      .orderBy(events.event_start,
               events.event_end,
               minutes.minute_start)\
      .show()

Без вызова hint результат будет ожидаемым:

+-----------+---------+------------+----------+
|event_start|event_end|minute_start|minute_end|
+-----------+---------+------------+----------+
|          0|      120|           0|        60|
|          0|      120|          60|       120|
|         12|       33|           0|        60|
|         33|       72|           0|        60|
|         33|       72|          60|       120|
|         65|      178|          60|       120|
+-----------+---------+------------+----------+

С hint я получу исключение:

AnalysisException: 'Range join hint: invalid arguments Buffer(60);'

Когда я попытался передать подсказку 60 в виде числа, а не строки, он пожаловался, что параметром подсказки должна быть строка.

Я не в Azure, но я ожидаю, что результат будет таким же.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...