如何使用Scala从Spark更新ORC Hive表

5
我想更新一个orc格式的hive表,我可以从ambari hive视图更新,但无法从sacla(spark-shell)运行相同的更新语句。
objHiveContext.sql(“select * from table_name”)能够查看数据,但是当我运行
objHiveContext.sql(“update table_name set column_name ='testing'”)无法运行,会出现一些Noviable异常(在更新附近的无效语法等),而我可以从Ambari视图更新(因为我设置了所有必需的配置,即TBLPROPERTIES“ orc.compress”=“ NONE”事务真实等)
尝试使用case语句插入等,但是没有成功 我们可以从spark更新hive ORC表吗? 如果可以,那么程序是什么?
已导入如下
import org.apache.spark.SparkConf
import org.apache.spark.SparkConf
import org.apache.spark._
import org.apache.spark.sql._
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.hive.orc._

注意:我没有在那个表上应用任何分区或桶操作。如果我应用桶操作,即使将数据存储为ORC格式,我也无法查看数据。Hive版本:1.2.1,Spark版本:1.4.1,Scala版本:2.10.6。
2个回答

1

回答sudhir的问题:

如何在保存时提及数据库名称?

您可以在表名之前提供数据库名称。 例如:如果您的数据库名称为orc_db,表名为yahoo_orc_table,则可以在表名之前提及db名称,如下所示:myData.write.format("orc").mode(SaveMode.Append).saveAsTable("orc_db.yahoo_orc_table")


1

成功了!所以我们不能直接更新hive表。我的意思是,如果我有一个约一万条记录的表,那么我需要加载整个表,然后更新并存储到新的数据框中,然后覆盖该表(SaveMode.Overwrite),因为追加将追加到现有的表而不是修改它..., 有没有其他选择?我保存了一个ORC格式的表,它保存在默认数据库中,如何在保存时指定数据库名称?我使用了这个命令来保存myData.write.format("orc").mode(SaveMode.Append).saveAsTable("yahoo_orc_table") - sudhir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接