当我试图使用pyspark dataframe或sql时,我遇到了一件奇怪的事情。当它在ipython笔记本或python控制台中工作时,我得到javax.jdo.JDOFatalInternalException:Error creating transactional connection factory“在pyspark shell中运行时出错。在
简而言之,如果我在iPython笔记本或简单的python终端中运行以下命令,一切都会正常工作:
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):
^{pr2}$我被抛出了一个错误:
>>> 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)
我让它发挥作用了。所以在启动Spark时,你有两个选择spark.sql.catalogImplementation“设置(配置单元或内存中)。我正在使用Windows,在设置Hive以使用pyspark时有点头疼。由于某些原因,运行pyspark的jupyter笔记本没有实现该设置(正因如此,它一直在工作)。但是,当运行interactivepyspark时,该设置是使用默认值运行的spark.sql.catalogImplementation=配置单元. 如果要避免配置单元的麻烦,只需在运行时提供参数:
然后运行这一行来测试它是否有效:
^{pr2}$如果这样的话,一切都很好。在
如果您想将该设置设为默认值,只需转到spark目录并编辑conf/spark文件-默认值.conf再加上设置'spark.sql.catalogImplementation=中-“记忆”。它最初可能是一个模板文件,所以请确保将其保存为.conf文件。在那之后,你启动pyspark的每件事,你都应该对hive没有问题。在
另一种检查方法是在pyspark会话启动时转到UI并检查environment页面(http://localhost:4041/environment/)。在“Spark属性”下,您可以看到什么值spark.sql.catalogImplementation有(我相信您也可以在交互式shell中检查该值)。在
同样,我只是在我的Windows机器上本地运行pyspark,但是现在,pyspark和dataframe支持可以无缝地与jupyter笔记本和交互式shell一起工作!在
相关问题 更多 >
编程相关推荐