首页 > 解决方案 > Scala:Spark SQL即使存在也无法解析列名

问题描述

我正在尝试对 Spark SQL 中的两个数据帧运行 SQL 查询。以下是我的代码:

    val targetData = sqlContext.read.format("csv")
                        .option("header","true")
                        .option("inferSchema","true")
                        .load("/Users/user/Desktop/input.csv")

    val inputData = sqlContext.read.format("csv")
                        .option("header","true")
                        .option("inferSchema","true")
                        .load("/Users/user/Desktop/input2.csv")
    
    targetData.printSchema()
    inputData.printSchema()
    targetData.registerTempTable("target")
    inputData.registerTempTable("input")
    
    val temp = sqlContext.sql("SELECT target.empid, target.name, target.code FROM target INNER JOIN input ON target.empid = input.empid WHERE input.flag = 'Y'")
    temp.show()

上面的代码产生以下输出:

root
 |-- empid: integer (nullable = true)
 |-- name: string (nullable = true)
 |-- code: string (nullable = true)

root
 |-- empid: integer (nullable = true)
 |-- name: string (nullable = true)
 |-- code: string (nullable = true)
 |-- flag: string (nullable = true)

Exception in thread "main" org.apache.spark.sql.AnalysisException: cannot resolve 'target.empid' given input columns empid, name, code;

如您所见,我可以清楚地看到目标数据框架构中的 empid,但是当我对其执行任何 sql 或选择列时,我仍然保持相同的错误。不知道为什么会这样。

我正在使用的版本:scala - 2.10.4 spark - 1.6 hive - 0.13 spark-csv_2.10 - 1.4.0

标签: scalaapache-spark-sql

解决方案


推荐阅读