IntelliJ中Spark查询临时表报错:找不到sqlContext
解决Spark中"not found: value sqlContext"错误
你遇到的这个错误很典型——在Spark 2.x版本中,SQLContext已经被SparkSession这个统一的入口对象取代了,而你的代码里并没有定义sqlContext这个变量,所以编译器找不到它。
直接修正代码的核心问题
你已经创建了spark这个SparkSession实例,直接用它的sql()方法就能执行SQL查询,不需要再单独使用SQLContext。把这段代码:
val ds = sqlContext.sql( """ |SELECT * |FROM people """.stripMargin)
改成:
val ds = spark.sql( """ |SELECT * |FROM people """.stripMargin)
另外,你的导入语句有很多重复(比如重复导入了org.apache.spark.sql.DataFrame、SparkSession等),可以清理一下让代码更简洁:
package batch import org.apache.spark.sql.{SaveMode, SparkSession} import org.apache.spark.sql.functions._ object BatchJob { def main(args: Array[String]) { val spark = SparkSession.builder .master("local") .appName("Fraud Detector") .config("spark.driver.memory", "2g") .enableHiveSupport() // 注意这里要加括号,避免编译警告 .getOrCreate() import spark.implicits._ val financesDF = spark.read.json("C:/spark/spark/question/data.json") financesDF.createOrReplaceTempView("people") val ds = spark.sql( """ |SELECT * |FROM people """.stripMargin) // 可以添加这行代码验证查询结果 ds.show() } }
检查POM文件的潜在问题
你的POM里引用了${scala.version}变量,但没有在<properties>块中定义它,需要补充进去,确保和Spark依赖的Scala版本一致(Spark 2.4.4对应的Scala版本是2.11):
<properties> <spark.version>2.4.4</spark.version> <scala.version>2.11</scala.version> </properties> <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>${spark.version}</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_${scala.version}</artifactId> <version>${spark.version}</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-hive_${scala.version}</artifactId> <version>${spark.version}</version> </dependency> </dependencies>
这样修改后,代码就能正常编译运行,顺利执行临时表的查询操作了。
内容的提问来源于stack exchange,提问作者Rashmi Ghosh
相关产品推荐
相关产品推荐

