通过spark将csv文件加载到现有配置单元

xmd2e60i  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(445)

下面是我编写的代码,用于连接到rdbms,然后创建临时表,对该临时表执行sql查询,并通过databricks模块将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.tbl是现有的配置单元表
执行代码后,出现以下错误:

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

这是否意味着databricks模块不支持“saveastable”功能?
如果是,请指出我代码中的错误。如果没有,那么解决方案/解决方法/行业标准是什么?
Spark1.6.1

kdfy810k

kdfy810k1#

我可以建议你们另一个解决办法。
可以使用插入功能在表中插入。

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

希望这个解决方案能帮到你,你可以直接写进表格,为什么要先写csv再写进表格呢?
即使需要文本分隔的文件@表路径。只需使用所需的分隔符将表定义为textfile表。您的files@table路径将是insert之后的分隔路径。
谢谢

xwmevbvl

xwmevbvl2#

假设您的表是托管的:只需执行df.write.saveastable('hive\u db.hive\u tbl',write\u mode='append')‌, 不需要通过一个中间的csv文件。
这个错误意味着csv的databricks模块不支持append模式。在github上有一个问题。所以解决方案是不使用附加模式的csv。

相关问题