【问题标题】:Join two dataframe using Spark Scala使用 Spark Scala 连接两个数据框
【发布时间】:2020-03-29 13:50:50
【问题描述】:

我有这个代码:

   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").

有什么想法吗?

谢谢。

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    您正在为 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)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多