【问题标题】:Apache spark error: not found: value sqlContextApache Spark 错误:未找到:值 sqlContext
【发布时间】:2022-01-06 09:01:12
【问题描述】:

我正在尝试在 Windows 10 中设置 spark。最初,我在启动时遇到了this error,链接中的解决方案有所帮助。现在我仍然无法运行import sqlContext.sql,因为它仍然给我一个错误

----------------------------------------------------------------
Fri Mar 24 12:07:05 IST 2017:
Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance a816c00e-015a-ff08-6530-00000ac1cba8
on database directory C:\metastore_db with class loader org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1@37606fee
Loaded from file:/F:/Soft/spark/spark-2.1.0-bin-hadoop2.7/bin/../jars/derby-10.12.1.1.jar
java.vendor=Oracle Corporation
java.runtime.version=1.8.0_101-b13
user.dir=C:\
os.name=Windows 10
os.arch=amd64
os.version=10.0
derby.system.home=null
Database Class Loader started - derby.database.classpath=''
17/03/24 12:07:09 WARN ObjectStore: Failed to get database global_temp, returning NoSuchObjectException
Spark context Web UI available at http://10.128.18.22:4040
Spark context available as 'sc' (master = local[*], app id = local-1490337421381).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.1.0
      /_/

Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101)
Type in expressions to have them evaluated.
Type :help for more information.

scala> import sqlContext.sql
<console>:23: error: not found: value sqlContext
       import sqlContext.sql
              ^

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    Spark 上下文可用作 'sc' (master = local[*], app id = 本地 1490337421381)。

    Spark 会话可用作“spark”。

    在 Spark 2.0.x 中,Spark 的入口点是 SparkSession,而在 Spark shell 中,入口点是 spark,所以试试这个方法:

    spark.sqlContext.sql(...)
    

    你也可以像这样创建你的 Spark 上下文

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

    第一个选项是我的选择,因为 Spark shell 已经为您创建了一个,所以请使用它。

    【讨论】:

      【解决方案2】:

      由于您使用的是 Spark 2.1,因此您必须使用 SparkSession 对象。您可以从SparkSession 对象中获取对SparkContext 的引用

      var sSession = org.apache.spark.sql.SparkSession.getOrCreate();
      var sContext = sSession.sparkContext;
      

      【讨论】:

        【解决方案3】:

        如果您在 Cloudera 上遇到此问题,则此 Github 票证中的解决方案对我有用 (https://github.com/cloudera/clusterdock/issues/30):

        root 用户(您在启动 spark-shell 时运行的用户)在 HDFS 中没有用户目录。如果你创建一个(sudo -u hdfs hdfs dfs -mkdir /user/root 后跟 sudo -u hdfs dfs -chown root:root /user/root),这应该是固定的。

        即为运行 spark-shell 的用户创建用户主目录。这为我解决了问题。

        【讨论】:

          【解决方案4】:

          别忘了导入上下文!

          import org.apache.spark.sql.{SparkSession, types}
          

          【讨论】:

            【解决方案5】:

            您必须创建sqlContext 才能访问它以执行 SQL 语句。在 Spark 2.0 中,您可以使用SparkSession 轻松创建 SQLContext,如下所示。

            val sqlContext = spark.sqlContext
            sqlContext.sql("SELECT * FROM sometable")
            

            或者,您也可以使用SparkSession 执行 SQL 语句,如下所示。

            spark.sql("SELECT * FROM sometable")
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-03-25
              • 1970-01-01
              • 2019-04-06
              • 1970-01-01
              • 1970-01-01
              • 2017-08-07
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多