簡體   English   中英

Spark / scala中的SQL查詢

[英]SQL queries in Spark/scala

我是Spark / scala的新手,正在嘗試將CS​​V文件導入spark,並分析其中的數據。 CSV文件有5列(passengerid,flightid,從,到,日期)。 我已經成功上傳了csv文件,但是當我執行查詢時,說要找出每月的總飛行次數,我會不斷收到錯誤-特別是'線程“ main”中的異常org.apache.spark.sql.AnalysisException :找不到表或視圖:df1; 第1行pos 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.showdf1.printSchema成功(也請仔細查看date數據類型),則可以嘗試以下操作:

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

您可能需要用to_date($"date", "yyyy/MM/dd") (或其他格式)包裝“ date”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM