我想通过pyspark脚本(python for spark)在hive的表“test”中插入一些数据。
首先,我在hue的hive图形界面中创建了一个表“animals”,感谢查询:
CREATE TABLE animals( id int, animal String)
因此我得到了一张新table。我写这个脚本是为了给它添加一个新行(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表的其他方法吗?
提前谢谢!
2条答案
按热度按时间lp0sw83n1#
可能是因为您创建了一个名为
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()
u5i3ibmn2#
看来问题已经解决了
insertInto
尝试使用saveAsTable
相反,insertinto在spark1.4中被弃用。像这样的
dataToInsert.write.mode("append").saveAsTable("SchemaName.animals")
注意,模式名是mandatroy。如果上面的一个没有给您带来好运,请尝试写入hive tables hdfs路径。我还建议您在为配置单元表运行pyspark job sql命令后修复它:
msck repair table <schema.tablename>;
从hivecontext或hive。为什么需要msck修复??看看我的另一个答案
这里是文档快照:
saveastable(name,format=none,mode=none,partitionby=none,**选项)将Dataframe的内容保存为指定的表。
如果表已经存在,则此函数的行为取决于mode函数指定的保存模式(默认为引发异常)。当mode为overwrite时,dataframe的架构不需要与现有表的架构相同。
追加:将此Dataframe的内容追加到现有数据。
覆盖:覆盖现有数据。错误:如果数据已存在,则引发异常。
忽略:如果数据已经存在,则自动忽略此操作。参数:name–表名格式–用于保存的格式
mode–append、overwrite、error、ignore之一(默认值:error)
partitionby–分区列的名称options–版本1.4中新增的所有其他字符串选项。