java - Spark/scala 中的 SQL 查询

标签 java sql scala apache-spark apache-spark-sql

我是 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.showdf1.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/

相关文章:

java - 单击 Wicket 口中的另一个链接时如何禁用选定的链接?

java - 使用 Jackson 将 hashmap 编码为 XML - 结构错误

mysql - 还返回过去 12 个月 mysql 中具有空值的空月份

java - 在 MainActivity 中将变量声明为静态变量并从其他类访问它们

java - 我们如何从 4 个内部 for 循环中退出?

mysql - 两个 where "date"子句有不同的列

MYSQL:从两个不同的表中选择 VARCHAR 字段中的最大值

.net - CLR 上的 Scala

scala - 在Spark DataFrame中对结构数组进行排序

scala - 在 Scala 中处理无效参数的最佳方法是什么