我想插入一些数据,我的表“测试”通过一个pySpark脚本(火种的python)。
我首先在HUE的图形界面中为Hive创建了一个表"animals“,感谢下面的查询:
CREATE TABLE animals( id int, animal String) 于是我买了一张新桌子。我写这个脚本是为了给它添加一个新行(1,dog):
from pyspark.conf import SparkConf
from pyspark import SparkContext
from pyspark.sql import SQLContext, HiveContext
sc = SparkContext()
hc = HiveContext(sc)
dataToInsert = hc.sql("select 1 as id, 'dog' as animal")
dataToInsert.write.mode("append").insertInto("animals")在执行它之后(在终端中使用"sudo pyspark myscript.py“执行了几次),它似乎没有添加任何东西。
你知道如何解决这个问题吗,或者通过Spark的python脚本将数据插入到Hive/Impala表中的其他方法?
提前感谢!
发布于 2018-01-25 22:08:26
这可能是因为您已经创建了一个名为test的表,并且要插入到可能不存在的animals中。
尝试更换动物进行测试。确保以sc.stop()结尾,并开始使用spark-submit
from pyspark.conf import SparkConf
from pyspark import SparkContext
from pyspark.sql import SQLContext, HiveContext
sc = SparkContext()
hc = HiveContext(sc)
dataToInsert = hc.sql("select 1 as id, 'dog' as animal")
dataToInsert.write.mode("append").insertInto("test")
sc.stop()它工作得很好。您使用的是什么版本?

发布于 2018-01-26 03:42:51
看起来问题出在insertInto尝试使用saveAsTable,insertInto在Spark1.4中已被弃用。
像dataToInsert.write.mode("append").saveAsTable("SchemaName.animals")这样的东西注意到模式名称是强制的。
如果上面的命令没有给您留下任何机会,请尝试写入hive表的HDFS路径。我还建议您在运行pyspark job sql命令后修复hive表:从hiveContext或hive运行msck repair table <schema.tablename>;。
为什么需要msck修复??查看我的另一个答案here
以下是Doc快照:
saveAsTable(name,format=None,mode=None,partitionBy=None,**options)将DataFrame的内容保存为指定表。
在表已经存在的情况下,此函数的行为取决于由mode函数指定的保存模式(默认抛出异常)。当模式为Overwrite时,DataFrame的架构不需要与现有表的架构相同。
append:将该DataFrame的内容追加到已有的数据上。
覆盖:覆盖已有数据。错误:如果数据已经存在,则抛出异常。
忽略:如果数据已经存在,则静默忽略此操作。参数: name -表名格式-保存时使用的格式
模式-附加、覆盖、错误、忽略之一(默认值:错误)
partitionBy -分区列的名称选项-所有其他字符串选项1.4版中新增的。
https://stackoverflow.com/questions/48443837
复制相似问题