Объедините два кадра данных, используя Spark Scala - PullRequest
0 голосов
/ 29 марта 2020

У меня есть этот код:

   val o =    p_value.alias("d1").join(t_d.alias("d2"),
      (col("d1.origin_latitude")===col("d2.origin_latitude")&& 
      col("d1.origin_longitude")===col("d2.origin_longitude")),"left").
      filter(col("d2.origin_longitude").isNull)
   val c =    p_value2.alias("d3").join(o.alias("d4"),
      (col("d3.origin_latitude")===col("d4.origin_latitude") && 
       col("d3.origin_longitude")===col("d4.origin_longitude")),"left").
      filter(col("d3.origin_longitude").isNull)

Я получаю эту ошибку:

Exception in thread "main" org.apache.spark.sql.AnalysisException: Reference 'd4.origin_latitude' is ambiguous, could be: d4.origin_latitude, d4.origin_latitude.;
at org.apache.spark.sql.catalyst.expressions.package$AttributeSeq.resolve(package.scala:240)
at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.resolveChildren(LogicalPlan.scala:101)

В этой строке

 (col("d3.origin_latitude")===col("d4.origin_latitude") && col("d3.origin_longitude")===col("d4.origin_longitude")),"left").

Есть идеи?

Спасибо.

1 Ответ

1 голос
/ 29 марта 2020

Вы используете псевдоним DataFrame, а не столбцы, которые используются для доступа / ссылки на столбцы в этом DataFrame. Таким образом, первое соединение приведет к другому DataFrame с одинаковым именем столбца дважды (origin_latitude, а также origin_longitude). Как только вы попытаетесь получить доступ к одному из этих столбцов в результирующем DataFrame, вы получите ошибку Ambiguity.

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

p_value
      .join(t_d, Seq("origin_latitude", "origin_longitude"), "left")
      .filter(t_d.col("t_d.origin_longitude").isNull)

...