我对scala和scala-api spark不熟悉,最近我在自己的计算机上尝试了scala-api spark,这意味着我可以通过设置SparkSession.builder()。master(“ local [*]”)在本地运行spark 。最初,我使用spark.sparkContext.textFile()成功读取了文本文件。获得相应的rdd之后,我尝试将rdd转换为spark DataFrame,但一次又一次失败。 具体来说,我使用了两种方法,1)toDF()和2)spark.createDataFrame(),都失败了,这两种方法都给了我类似的错误,如下所示。
2018-10-16 21:14:27 ERROR Schema:125 - Failed initialising database.
Unable to open a test connection to the given database. JDBC url = jdbc:derby:;databaseName=metastore_db;create=true, username = APP. Terminating connection pool (set lazyInit to true if you expect to start your database after your app). Original Exception: ------
java.sql.SQLException: Failed to start database 'metastore_db' with class loader
org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1@199549a5, see the next exception for details.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(Unknown Source)
at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
我检查了错误消息,似乎错误与apache.derby有关,并且与某些数据库的某些连接失败。我不知道JDBC实际上是什么。我对pyspark有点熟悉,而且从未被要求配置任何JDBC数据库,为什么需要SCALA-API SPARK?我应该怎么做才能避免这个错误?为什么scala-api spark数据帧需要JDBC或任何数据库,而scala-api spark RDD却不需要?
答案 0 :(得分:1)
对于未来的Googler: 我已经搜索了几个小时,但仍然不知道如何摆脱这个错误。但是这个问题的根源很清楚:我的sparksession使能了对Hive的支持,然后需要指定数据库。要解决此问题,我们需要禁用对Hive的支持,因为我在自己的Mac上运行spark,因此可以这样做。 因此,我下载了spark源文件并使用以下命令自行构建 ./make-distribution.sh --name hadoop-2.6_scala-2.11 --tgz -Pyarn -Phadoop-2.6 -Dscala-2.11 -DskipTests 省略-Phive -Phive-thriftserver。 我测试了自建的Spark,从未创建过metastore_db文件夹,而且非常好。
有关详细信息,请参阅这篇文章:Prebuilt Spark 2.1.0 creates metastore_db folder and derby.log when launching spark-shell