通过Spark将csv文件加载到现有的HIVE故事中

时间:2017-12-22 09:02:57

标签: sql-server hadoop hive pyspark databricks

下面是我编写的用于连接到RDBMS的代码,然后创建临时表,在该临时表上执行SQL查询,通过数据库模块将SQL查询输出保存为.csv格式。

from pyspark import SparkContext
sc = SparkContext("local", "Simple App")
from pyspark.sql import SQLContext, Row
sqlContext = SQLContext(sc)
from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)

df = sqlContext.read.format("jdbc").option("url","jdbc:sqlserver://<server>:<port>").option("databaseName","xxx").option("driver","com.microsoft.sqlserver.jdbc.SQLServerDriver").option("dbtable","xxxx").option("user","xxxxx").option("password","xxxxx").load()

df.registerTempTable("test")

df1= sqlContext.sql("select * from test where xxx= 6")
df1.write.format("com.databricks.spark.csv").save("/xxxx/xxx/ami_saidulu")

df1.write.option("path", "/xxxx/xxx/ami_saidulu").saveAsTable("HIVE_DB.HIVE_TBL",format= 'csv',mode= 'Append')

HIVE.DB是现有的HIVE数据库       HIVE.TBL是现有的HIVE表

执行代码后,我收到以下错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o68.saveAsTable.
: java.lang.RuntimeException: Append mode is not supported by com.databricks.spark.csv.DefaultSource15

这是否意味着,数据库模块不支持“saveAsTable”功能?

如果是,那么请指出我的代码中的错误。 如果不是,那么解决方案/解决方案/行业标准是什么?

Spark 1.6.1

2 个答案:

答案 0 :(得分:1)

我可以建议你另一个解决方案。

您可以使用插入功能在表格中插入。

sqlContext.sql("INSERT INTO/OVERWRITE TABLE HIVE_DB.HIVE_TBL select * from test where xxx= 6")

我希望这个解决方案可以帮助你,你可以直接写入表格,为什么要写入csv然后写入表格?

即使你想要文本分隔文件@table路径。只需使用所需的分隔符将表定义为TextFile表。在插入后,您的文件@table路径将是分隔的。

由于

答案 1 :(得分:0)

假设您的表已被管理: 只需执行df.write.saveAsTable('HIVE_DB.HIVE_TBL',write_mode ='追加'),无需通过中间csv文件。

此错误的含义是csv的数据库模块不支持追加模式。 github上有一个问题here。因此解决方案不是将csv与追加模式一起使用。