你必须用Hive构建Spark.导出'SPARK_HIVE = true'

Chr*_*now 4 apache-spark ibm-cloud

我正在尝试在Bluemix上运行的Analytics for Apache Spark上运行笔记本,但是我遇到了以下错误:

Exception: ("You must build Spark with Hive. Export 'SPARK_HIVE=true' and 
run build/sbt assembly", Py4JJavaError(u'An error occurred while calling 
None.org.apache.spark.sql.hive.HiveContext.\n', JavaObject id=o38))
Run Code Online (Sandbox Code Playgroud)

错误是间歇性的 - 它并不总是发生.有问题的代码行是:

df = sqlContext.read.format('jdbc').options(
            url=url, 
            driver='com.ibm.db2.jcc.DB2Driver', 
            dbtable='SAMPLE.ASSETDATA'
        ).load()
Run Code Online (Sandbox Code Playgroud)

stackoverflow上有一些类似的问题,但他们并没有询问bluemix上的spark服务.

Rol*_*ber 8

该语句初始化了一个隐藏的HiveContext.然后,HiveContext初始化本地Derby数据库以保存其元数据.默认情况下,Derby数据库在当前目录中创建.报告的问题在这些情况下发生(除其他外):

  1. Derby数据库已经存在,并且有剩余的锁文件,因为上次使用它的笔记本内核没有正常关闭.
  2. Derby数据库已经存在,并且当前正由另一个也初始化HiveContext的笔记本内核使用.

在IBM更改默认设置以避免此问题之前,可能的解决方法是:

  • 对于案例1,删除剩余的锁定文件.从Python笔记本中,这可以通过执行:

    !rm -f ./metastore_db/*.lck
    
    Run Code Online (Sandbox Code Playgroud)
  • 对于案例2,在创建Hive上下文之前更改当前工作目录.在Python笔记本中,这将更改为新创建的目录:

    import os
    import tempfile
    os.chdir(tempfile.mkdtemp())
    
    Run Code Online (Sandbox Code Playgroud)

    但要注意,每次运行该笔记本时,它都会使文件系统与新目录和Derby数据库混乱.

我碰巧知道IBM正在修复.请仅在遇到问题时使用这些解决方法,而不是主动使用.


Sve*_*ger 5

SQLContext在使用之前创建一个新对象sqlContext:

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
Run Code Online (Sandbox Code Playgroud)

然后再次运行代码.

如果您有多个笔记本电脑使用开箱即用,则会发生此错误sqlContext.