当我尝试使用pysparkDataframe或sql时,发生了一件奇怪的事情。当它在ipython笔记本或python控制台中工作时,当我在pyspark shell中运行它时,会出现“javax.jdo.jdofatalinternalexception:error creating transactional connection factory”错误。
简而言之,如果我在ipython notebook或python terminal中运行以下命令,一切都正常:
import findspark
findspark.init("C:\Spark\spark-2.3.3-bin-hadoop2.7")
import pyspark # only run after findspark.init()
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
spark.sql('''select 'spark' as hello ''').show()
当我通过键入'pyspark'打开pyspark shell时,我执行以下命令:(sparksession already initialized):
spark.sql('''select 'spark' as hello ''').show()
我犯了个错误:
>>> spark.sql('''select 'spark' as hello ''').show()
2019-05-12 18:41:35 WARN HiveMetaStore:622 - Retrying creating default database after error: Error creating transactional connection factory
javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
...
pyspark.sql.utils.AnalysisException: 'java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;'
这很奇怪,你知道为什么它在一种环境下工作,而在另一种环境下却不工作吗?谢谢!
编辑:更多错误:
java.sql.SQLException: Unable to open a test connection to the given database. JDBC url = jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true, username = root. Terminating connection pool (set lazyInit to true if you expect to start your database after your app). Original Exception: ------
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
1条答案
按热度按时间brjng4g31#
我让它工作了。因此,在启动spark时,您有两个“spark.sql.catalogimplementation”设置选项(配置单元或内存中)。我使用的是windows,设置hive以使用pyspark很头疼。出于某种原因运行pyspark的jupyter笔记本没有实现这个设置(因为这个原因它可以工作)。但是,在运行交互式pyspark时,该设置使用默认值spark.sql.catalogimplementation=hive运行。如果要避免配置单元问题,只需在运行时给出如下参数:
然后运行这条线来测试它的工作情况:
如果运行正常,那么一切都正常。
如果要将该设置设为默认设置,只需转到spark目录并编辑conf/spark-defaults.conf文件,然后只需添加设置“spark.sql.catalogeimplementation=in memory”。它最初可能是一个模板文件,所以请确保将其保存为.conf文件。在那之后,你所做的一切,你应该没有问题与Hive。
另一种检查方法是在pyspark会话启动时转到ui并检查environment页面(http://localhost:4041/环境/)。在“spark properties”下,您可以看到spark.sql.catalogimplementation的值(我相信您也可以在交互式shell中检查该值)。
同样,我只是在我的windows机器上本地运行pyspark,但是现在,pyspark和dataframe支持可以无缝地与jupyter笔记本和交互式shell一起工作!