pyspark配置单元sql-未插入数据

vfwfrxfs  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(398)

我想通过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表的其他方法吗?
提前谢谢!

lp0sw83n

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()

它只是工作得很好。你用的是什么版本?
![](https://i.stack.imgur.com/nWZmY.png)
u5i3ibmn

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中新增的所有其他字符串选项。

相关问题