我是PySpark的新手。我正在使用以下spark-submit
进程在群集中的Hive中加载表。
/usr/hdp/2.5.0.0-1245/spark2/bin/spark-submit --driver-class-path /path/to/driver/sqljdbc4-3.0.jar --jars /path/to/driver/sqljdbc4-3.0.jar --deploy-mode cluster --master yarn /home/meter/myfile.py
每当我运行此命令时,都会遇到无数错误。喜欢
1. pyspark.sql.utils.analysisexception u'path file:/root/spark-warehouse/table_name already exist
2. Couldn't find driver for com.microsoft.sqljdbc # something like this
3. Some other staging related errors
底线:我无法使用上面的spark-submit
代码创建一个Hive表。我的Python脚本如下
from pyspark import SparkConf,SparkContext
from pyspark.sql import HiveContext,SQLContext
conf = SparkConf().setAppName("myapp")
sc = SparkContext(conf=conf)
sql_cntx = SQLContext(sc)
df_curr_volt = sql_cntx.read.format("jdbc").options(url="url",dbtable="table").load()
hc = HiveContext(sc)
df_cv_filt.write.format("orc").saveAsTable("df_cv_raw")
基于stackoverflow搜索,看来我需要修改上面的conf
定义。或者我必须在Hive
中添加hive-site.xml
元存储区spark-submit
。
或者我可能错过了我不知道的东西。
我的问题是:我应该使用正确的spark-submit
代码?还是我需要在上面的python代码中进行任何修改,然后运行spark-submit
?还是我应该使用spark2-submit
?
附注:我正在使用PySpark 2.0。
更新
我现在终于将错误归零了。这是在阅读了一些其他stackoverflow帖子后进行的一些尝试。
实际上,我已将spark-submit
更改为以下内容。
/usr/hdp...bin/spark-submit --driver-class /path/to/sqljdbc4-3.0.jar --jars /path /to/ sqljdbc4-3.0.jar --master yarn /path/to/.py
然后发布此消息,如下所示。
staging error.could not find registered driver com.microsoft.sqlserver.jdbc.SQLServerDriver #similar to this line.
有趣的是,使用scala
时,相同的方法也可以正常工作。
请让我知道如何立即解决此问题。
答案 0 :(得分:1)
df_cv_filt.write.format("orc").saveAsTable("df_cv_raw").
saveAsTable:这将创建一个表,并且由于该表已经存在,除非您使用覆盖,否则将不允许该表
df_cv_filt.write.mode('overwrite').format("orc").saveAsTable("df_cv_raw")
或者您已将insertInto与数据一起使用
data.write.mode("append").insertInto("my_table").
此外,请确保您具有对jar文件及其对应于sql-server的正确版本的读访问权限。
答案 1 :(得分:1)
因此,我无法找出spark-submit
故障背后的实际原因(尽管提供了正确的mssql-jdbc
驱动程序。
但是,我遇到了另一种新颖的方法来执行spark
工作。
我正在使用$python /home/meter/myfile.py
。在myfile.py
中,我在properties
方法内将"driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver"
添加为sql_context.read
。
我能够看到正在创建的Hive表。