当前位置: 首页 > 知识库问答 >
问题:

spark连接导致列id歧义错误

蒯安平
2023-03-14

我有以下数据帧:

accumulated_results_df
 |-- company_id: string (nullable = true)
 |-- max_dd: string (nullable = true)
 |-- min_dd: string (nullable = true)
 |-- count: string (nullable = true)
 |-- mean: string (nullable = true)

computed_df
 |-- company_id: string (nullable = true)
 |-- min_dd: date (nullable = true)
 |-- max_dd: date (nullable = true)
 |-- mean: double (nullable = true)
 |-- count: long (nullable = false)

尝试使用spark-sql进行连接,如下所示

 val resultDf = accumulated_results_df.as("a").join(computed_df.as("c"), 
                             ( $"a.company_id" === $"c.company_id" ) && ( $"c.min_dd" > $"a.max_dd" ), "left")

给出错误为:

org.apache.spark.sql.AnalysisException: Reference 'company_id' is ambiguous, could be: a.company_id, c.company_id.;

我在这里做错了什么,如何修复?

共有2个答案

曹光霁
2023-03-14

我已经修复了它,如下所示。

val resultDf = accumulated_results_df.join(computed_df.withColumnRenamed("company_id", "right_company_id").as("c"), 
                             (  accumulated_results_df("company_id" ) === $"c.right_company_id" && ( $"c.min_dd" > accumulated_results_df("max_dd") ) )
                        , "left")
丁灿
2023-03-14

应该使用coll函数正确引用别名数据框和列

val resultDf = (accumulated_results_df.as("a")
       .join(
           computed_df.as("c"),
           (col("a.company_id") === col("c.company_id")) && (col("c.min_dd") > col("a.max_dd")), 
           "left"
        )

 类似资料:
  • 问题内容: 我正在使用两个表从数据库中查询,并收到问题标题中描述的错误。在某些情况下,我需要查询的字段在表A中,而其他字段在表B中。我动态创建要搜索的列(可以在表A或表B中),而我的代码中的WHERE子句是导致错误。 是否有一种动态的方法来解决此问题,例如,如果列位于表B中,然后使用表B进行搜索,或者INNER JOIN是否应该解决此问题(当前不是) 表A 栏位:id 表B 栏位:id SQL代码

  • 我在努力做一些简单而琐碎的事情--或者至少我认为。 我试图编写一个基类,可以由我旋转的每个微服务项目继承。这个基类的目的是测试从HTTP到SQL的连接性。在prod中没有启用它。 这是一个(更简单的)基类: 我希望把它用作:

  • 我试图在Azure devops中创建一个发布管道来部署api。 当我试图授权部署阶段时,会出现以下错误。没有任何真正有助于解决的信息。任何建议都很感激。我是订阅的所有者。

  • 我已经在谷歌上搜索了4个多小时的stackoverflow来寻找我的问题的解决方案,阅读并试图了解正在发生的事情,但我没有遇到与我的问题相关的解决方案,所以抱歉,如果这听起来像是重复的,我会尽力解释到底发生了什么,这样我就可以深入了解C3P0的内部工作。 我有一个运行在Tomcat上的SpringMVC web应用程序,其中Hibernate、JPA和C3P0是我的池资源。重新加载页面时,应用程序

  • 我得到了一个错误:- 线程“main”java.lang.nosuchmethoderror:com.datastax.driver.core.queryoptions.setrefreshnodeintervalmillis(I)lcom/datastax/driver/core/queryoptions;**在com.datastax.spark.connector.cql.defaultCo

  • 我用Spring靴。我创建了这两个方法: 当我尝试登录web应用程序时,我得到: java.lang.IllegalStateException:映射到HTTP路径“HTTP://localhost:8080/rest/user/bsmith”的处理程序方法不明确:{public com.zenar.dto.userappdto com.zenar.controller.usercontrolle