Pyspark-saveAsTable-如何将新数据插入现有表?

时间:2018-11-08 16:46:42

标签: apache-spark pyspark apache-spark-sql pyspark-sql

如何将新数据插入现有表格?

我正在尝试使用pyspark将新数据插入到现有表中。

这是我的程序

from pyspark import SparkContext
from pyspark.sql import SQLContext, DataFrameWriter

sc = SparkContext("local[*]", "SPARK-SQL")
sqlContext = SQLContext(sc)

df = sqlContext.read.json("people.json")
df.registerTempTable("people")

# Show old data
result = sqlContext.sql("SELECT * from people")
result.show()

# Create new data
new_data = [{"name": "Phan", "age": 22}]
df_new_data = sqlContext.createDataFrame(new_data)
# Save data to table 'people'
df_new_data.write.mode("append").saveAsTable("people")

# Show new data
result = sqlContext.sql("SELECT * from people")
result.show()

运行后。表“ people”中的数据无法更改。

Old data
+---+--------+
|age|    name|
+---+--------+
| 30| Michael|
| 30|    Andy|
| 19|  Justin|
| 21|PhanHien|
+---+--------+
New data
+---+--------+                                                                  
|age|    name|
+---+--------+
| 30| Michael|
| 30|    Andy|
| 19|  Justin|
| 21|PhanHien|
+---+--------+

请帮助我更改表中的数据!!! 谢谢!

2 个答案:

答案 0 :(得分:0)

>>> df_new_data.write.mode("append").saveAsTable("people")

上面的代码将 people 表写入配置单元中的默认数据库中。

因此,如果要查看配置单元表中的数据,则需要创建 HiveContext ,然后查看配置单元表而不是临时表中的结果。

>>> hc=HiveContext(sc)
>>> hc.sql("select * from default.people").show(100,False)
  

更新:

将新数据追加到临时表

>>> df1=df
>>> df2=df.unionAll(df1)
>>> df2.registerTempTable("people")
>>> sqlContext.sql("select * from people").show(100,False)

答案 1 :(得分:0)

我尝试使用表名不存在的saveAsTable。

df_new_data.write.mode("append").saveAsTable("people1")

# Show new data
result = sqlContext.sql("SELECT * from people1")
result.show()

有效。而且我可以在表“ people1”

中看到新数据
+---+----+
|age|name|
+---+----+
|22 |Phan|
+---+----+