Java Spark/scala中的SQL查询

Java Spark/scala中的SQL查询,java,sql,scala,apache-spark,apache-spark-sql,Java,Sql,Scala,Apache Spark,Apache Spark Sql,我是Spark/scala的新手,我正在尝试将CSV文件导入Spark,并分析其中的数据。CSV文件有5列(passengerid、flightid、from、to、date)。我已经成功地上传了csv文件,但是当我对它执行查询时,比如说要找出每月的航班总数,我不断地得到错误——特别是“线程中的异常”org.apache.spark.sql.AnalysisException:Table或view not found:df1;第1行位置14'。该表已成功上载,因为我可以将其视为输出,问题在于查询

我是Spark/scala的新手,我正在尝试将CSV文件导入Spark,并分析其中的数据。CSV文件有5列(passengerid、flightid、from、to、date)。我已经成功地上传了csv文件,但是当我对它执行查询时,比如说要找出每月的航班总数,我不断地得到错误——特别是“线程中的异常”org.apache.spark.sql.AnalysisException:Table或view not found:df1;第1行位置14'。该表已成功上载,因为我可以将其视为输出,问题在于查询该表。有什么想法吗

我的代码如下:

''包装GerardPRactice

import org.apache.spark.SparkContext

import org.apache.spark.SparkContext._

import org.apache.spark.SparkConf

import org.apache.spark.sql.SparkSession

import org.apache.spark.sql.SQLContext


object trial1 extends App {

  val sparkConf = new SparkConf().setAppName("trial1").
setMaster("local[2]") //set spark configuration

val sparkContext = new SparkContext(sparkConf) // make spark context
val sqlContext = new SQLContext(sparkContext) // make sql context

  val spark = SparkSession
    .builder()
    .master("local")
    .appName("Question1")
    .getOrCreate()



val df1 = sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "true")
    .option("delimiter", "|")
    .option("inferSchema", "true")
    .load("C:/Users/Gerard/Documents/flightData.csv")
   // df1: org.apache.spark.sql.DataFrame = [passengerID: int, flightID: int, Departure: string, Destination: string, date: int]

    val df2 = sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "true")
    .option("delimiter", "|")
    .option("inferSchema", "true")
    .load("C:/Users/Gerard/Documents/passengers.csv")

  df1.show()
  //val PassID = df1.select("passengerId")
  val totalflightJAN = spark.sql("SELECT * FROM df1 WHERE date>= '2017-01-01' & date<='2017-01-31'")
  totalflightJAN.collect.foreach(println)
}'''
import org.apache.spark.SparkContext
导入org.apache.spark.SparkContext_
导入org.apache.spark.SparkConf
导入org.apache.spark.sql.SparkSession
导入org.apache.spark.sql.SQLContext
对象trial1扩展应用程序{
val sparkConf=new sparkConf().setAppName(“trial1”)。
setMaster(“本地[2]”//设置spark配置
val sparkContext=new sparkContext(sparkConf)//生成spark上下文
val sqlContext=new sqlContext(sparkContext)//生成sql上下文
val spark=火花会话
.builder()
.master(“本地”)
.appName(“问题1”)
.getOrCreate()
val df1=sqlContext.read
.format(“com.databricks.spark.csv”)
.选项(“标题”、“正确”)
.option(“分隔符”、“|”)
.选项(“推断模式”、“真”)
.load(“C:/Users/Gerard/Documents/flightData.csv”)
//df1:org.apache.spark.sql.DataFrame=[passengerID:int,flightID:int,出发点:string,目的地:string,日期:int]
val df2=sqlContext.read
.format(“com.databricks.spark.csv”)
.选项(“标题”、“正确”)
.option(“分隔符”、“|”)
.选项(“推断模式”、“真”)
.load(“C:/Users/Gerard/Documents/passengers.csv”)
df1.show()
//val PassID=df1。选择(“passengerId”)

val totalflightJAN=spark.sql(“从df1中选择*,其中日期>='2017-01-01'&date帮个忙,切换到数据帧语法而不是纯sql:)

假设
df1.show
df1.printSchema
成功(另外,仔细查看
date
数据类型),您可以尝试以下操作:

df1.filter($"date" >= lit('2017-01-01') && $"date" <= lit('2017-01-31'))

df1.filter($“date”>=lit('2017-01-01')&&$“date”要像这样使用spark sql,您需要从数据帧创建一个视图-
df1.createOrReplaceTempView(“您必须
df1.createOrReplaceTempView(viewName=“df1”)
。如果表不存在,您希望查询如何工作?您有一个数据框,它是运行时数据结构,而不是配置单元表。您读过了吗?感谢您的帮助,它工作了。但是,我仍在运行未注册的查询。例如,我对(列)flightID'val totalflightJAN=spark.sql运行查询(“SELECT*FROM df1 where to='cg'),但它在给定的输入列[df1.passengerId,flightId,FROM,to,date]中返回一个错误'cannot resolve'
'谢谢,我已经使用了它,并且它已经部分起作用了。我希望使用这种语法来找出每个月的总数。我正在尝试使用count函数,但不确定确切的位置。您可能想看看
.groupBy(…)如果它解决了你原来的问题,请考虑接受答案。