我是 Spark/scala 的新手,我正在尝试将 CSV 文件导入到 Spark 中,并分析其中的数据。 CSV 文件有 5 列(passengerid、flightid、from、to、date)。我已经成功上传了 csv 文件,但是当我对其执行查询时,比如说找出每月的总航类数,我不断收到错误 - 特别是“线程“main”中的异常 org.apache.spark.sql.AnalysisException” :未找到表或 View :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)
}'''
最佳答案
帮自己一个忙,切换到 DataFrame 语法而不是纯 SQL! :)
假设 df1.show
和 df1.printSchema
成功(另外,请仔细查看您的 date
数据类型),您可以尝试以下操作:
df1.filter($"date" >= lit('2017-01-01') && $"date" <= lit('2017-01-31'))
您可能需要用 to_date($"date", "yyyy/MM/dd")
(或其他格式)包裹“date”
关于java - Spark/scala 中的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57995525/