PySaprk:火花提交不能执行所需的工作

时间:2019-03-29 02:22:24

标签: sql-server apache-spark hive pyspark

我是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时,相同的方法也可以正常工作。 请让我知道如何立即解决此问题。

2 个答案:

答案 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表。