如何使用 scala 在 spark 中创建 SQLContext?

How to create SQLContext in spark using scala?

我正在使用 sbt 创建一个 SQLContext 的 Scala 程序。这是我的build.sbt:

name := "sampleScalaProject"

version := "1.0"

scalaVersion := "2.11.7"
//libraryDependencies += "org.apache.spark" %% "spark-core" % "2.5.2"
libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "1.5.2"
libraryDependencies += "org.apache.kafka" % "kafka_2.11" % "0.8.2.2"
libraryDependencies += "org.apache.spark" % "spark-streaming_2.11" % "1.5.2"
libraryDependencies += "org.apache.spark" % "spark-sql_2.11" % "1.5.2"
libraryDependencies += "org.apache.hadoop" % "hadoop-common" % "2.6.0"  

这是测试程序:

import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContext

object SqlContextSparkScala {

  def main (args: Array[String]) {
    val sc = SparkContext
    val sqlcontext = new SQLContext(sc)
  }
} 

我遇到以下错误:

Error:(8, 26) overloaded method constructor SQLContext with alternatives:
  (sparkContext: org.apache.spark.api.java.JavaSparkContext)org.apache.spark.sql.SQLContext <and>
  (sparkContext: org.apache.spark.SparkContext)org.apache.spark.sql.SQLContext
 cannot be applied to (org.apache.spark.SparkContext.type)
    val sqlcontexttest = new SQLContext(sc)  

任何人都可以让我知道这个问题,因为我对 scala 和 spark 编程还很陌生?

您需要 new 您的 SparkContext 应该可以解决问题

val conf = new SparkConf().setAppName("SparkJoins").setMaster("local")
val sc = new SparkContext(conf);
val sqlContext = new org.apache.spark.sql.SQLContext(sc);    

我们可以简单地在 scala 中创建 SQLContext

scala> val sqlContext = new org.apache.spark.sql.SQLContext(sc);    

对于 更新版本 的 Spark (2.0+),使用 SparkSession:

val spark = SparkSession.builder.getOrCreate()

SparkSession 可以做 SQLContext 可以做的一切,但如果需要,可以按如下方式访问 SQLContext

val sqlContext = spark.sqlContext

如果您使用的是 scala shell 然后使用下面的语句

val sqlContext = spark.sqlContext

要读取 parquet 文件,请使用以下语句

val df = sqlContext.read.parquet("/path/to/folder/cotaning/arquet/files/")