Подтвердить что ты не робот

DataFrame не может найти имя столбца после условия соединения

У меня возникает одна проблема типа " sql.AnalysisException: не удается разрешить имя_столбца" при выполнении одной операции соединения с использованием API-интерфейса DataFrame. Хотя имя столбца существует, и такая же операция соединения работает нормально, когда вы пытаетесь использовать формат HiveContext в формате SQL. В следующей базе кода

DataFrame df= df1
  .join(df2, df1.col("MERCHANT").equalTo(df2.col("MERCHANT")))
  .select(df2.col("MERCH_ID"), df1.col("MERCHANT")));

Я тоже пытался использовать функцию "alias", но получил ту же проблему "Невозможно разрешить имя столбца". и бросая следующее исключение.

разрешенные атрибуты MERCH_ID # 738 отсутствуют в MERCHANT # 737, MERCHANT # 928, MERCH_ID # 929, MER_LOС# 930 в операторе! Project [MERCH_ID # 738, MERCHANT # 737];

at org.apache.spark.sql.catalyst.analysis.CheckAnalysis $class.failAnalysis(CheckAnalysis.scala: 38)

Искра Версия: 1.6

Проблема столкнулась как с Scala, так и с Java Spark.

В Scala проблема решена с использованием alias ', но в Java я все еще получаю ошибку.

4b9b3361

Ответ 1

Из моего опыта лучше избегать DataFrame.col и DataFrame.apply, если это не требуется для устранения неоднозначности (aliasing все же лучше). Попробуйте использовать независимые объекты Column:

import org.apache.spark.sql.functions;

DataFrame df= df1.alias("df1").
  .join(df2.alias("df2"), functions.col("df1.MERCHANT").equalTo(functions.col("df2.MERCHANT")))
  .select(functions.col("df2.MERCH_ID"), functions.col("df2.MERCHANT")));