Spark 2.3, Атрибут(ы) с тем же именем появляется в операции

#sql #apache-spark #apache-spark-sql

Вопрос:

Допустим, у меня есть две таблицы с одинаковыми столбцами, и я подозреваю, что между этими двумя таблицами могут быть разные строки. Поэтому я выполняю следующий запрос, чтобы проверить, что:

 SELECT
reconnectTimeStamp,
prevreconnectMilliSecondTimeStampS,
prev_reconnect_interfaceMacS,
reconnect_homeS
FROM t_reconnect_disconnect_prior_V1

EXCEPT

SELECT
reconnectTimeStamp,
prevreconnectMilliSecondTimeStampS,
prev_reconnect_interfaceMacS,
reconnect_homeS
FROM t_reconnect_disconnect_prior_V2
 

Это возвращает следующую ошибку:

В операции появляются атрибуты с одинаковым именем: метки времени prevreconnectmillisecond,символы prev_reconnect_interfaceMacS. Пожалуйста, проверьте, используются ли правильные атрибуты

Если я изменю свой запрос на этот, он будет работать без ошибок:

 SELECT
reconnectTimeStamp,
prevreconnectMilliSecondTimeStampS as c1,
prev_reconnect_interfaceMacS as c2,
reconnect_homeS
FROM t_reconnect_disconnect_prior_V1

EXCEPT

SELECT
reconnectTimeStamp,
prevreconnectMilliSecondTimeStampS as c1,
prev_reconnect_interfaceMacS as c2,
reconnect_homeS
FROM t_reconnect_disconnect_prior_V2
 

Можете ли вы придумать какое-либо объяснение тому, что это произошло? Чем отличаются только эти 2 названия столбцов?

P.S. Это единственные столбцы, которые неоднозначно создаются в другом временном представлении, чтобы оказаться в этих представлениях.

 select
lag(reconnect_milliSecondTimeStampS, 1, "1898868600000") OVER (PARTITION BY  
                                            reconnect_homeS, reconnect_stationMacS ORDER BY reconnect_milliSecondTimeStampS ASC) 
                                                                                    as prevreconnectMilliSecondTimeStampS,
lag(reconnect_interfaceMacS, 1, "1898868600000") OVER (PARTITION BY 
                                            reconnect_homeS, reconnect_stationMacS ORDER BY reconnect_milliSecondTimeStampS ASC) 
                                                                                    as prev_reconnect_interfaceMacS

FROM some_table
 

Комментарии:

1. Являются ли эти таблицы временными таблицами, созданными из некоторых фреймов данных с помощью createOrReplaceTempView? Не совсем уверен, что является причиной этого, но у меня такое чувство, что эта проблема может быть вызвана неоднозначными столбцами, созданными при повторном использовании одного и того же фрейма данных.

2. Именно, они создаются с помощью createOrReplaceTempView. На самом деле, это единственные столбцы, которые взяты не непосредственно из другой таблицы, а в результате примененной функции задержки, которая впоследствии была переименована.

3. Хорошо, в таком случае проблема чем-то похожа на то, о чем сообщается здесь . issues.apache.org/jira/browse/SPARK-10925 . Я столкнулся с аналогичной проблемой ,когда я выполнил множество преобразований, используя несколько базовых DFS, создал окончательный DF, который должен был использоваться в последующих преобразованиях, используя базовый DFS в качестве ссылки. Проблема была решена путем создания копии фрейма данных, которая вызывала неоднозначность. В вашем случае, если вы переименуете атрибуты во время создания t_reconnect_disconnect_prior_V1 и t_reconnect_disconnect_prior_V2, это должно решить проблему