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

loading a csv file to existing HIVE tale through Spark

下面是我为连接到 RDBMS 而编写的代码,然后创建临时 table,在该临时 table 上执行 SQL 查询,保存 SQL 通过 databricks 模块查询输出为 .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 TABLE

执行代码后,出现以下错误:

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" 功能?

如果是,请指出我代码中的错误。 如果不是,那么 solution/work around/industry 标准是什么?

Spark 1.6.1

假设您的 table 受到管理: 只需执行 df.write.saveAsTable('HIVE_DB.HIVE_TBL',write_mode='Append')‌,无需通过中间 csv 文件。

这个错误的意思是csv的d​​atabricks模块不支持Append模式。 github here 上存在问题。所以解决方案是不要将 csv 与追加模式一起使用。

我可以向您推荐另一种解决方案。

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

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

希望这个方案对你有帮助,你可以直接写入table,为什么要先写入csv再写入table?

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

谢谢