deta lake

环境搭建

pip install --upgrade pyspark
pyspark --packages io.delta:delta-core_2.12:0.7.0 --conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"
spark = pyspark.sql.SparkSession.builder.appName("MyApp") \
.config("spark.jars.packages", "io.delta:delta-core_2.12:0.7.0") \
.config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
.config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
.getOrCreate()
 
from delta.tables import *

Create a table

data = spark.range(0, 5)
data.write.format("delta").save("/tmp/delta-table")
>>> spark.sql("CREATE TABLE IF NOT EXISTS events USING DELTA LOCATION '/delta/events'");
DataFrame[]

Read data

>>> df = spark.read.format("delta").load("/tmp/delta-table")
>>> df.show()
+---+
| id|
+---+
| 0|
| 1|
| 2|
| 3|
| 4|
+---+

>>> spark.sql("select id from events2").show();
+---+
| id|
+---+
| 0|
| 1|
| 2|
| 3|
| 4|
+---+

Update table data

data = spark.range(5, 10)
data.write.format("delta").mode("overwrite").save("/tmp/delta-table")

Conditional update without overwrite

>>> from delta.tables import *
>>> from pyspark.sql.functions import *
>>> deltaTable = DeltaTable.forPath(spark, "/tmp/delta-table")
>>> deltaTable.update(
... condition = expr("id % 2 == 0"),
... set = { "id": expr("id + 100") })
>>> deltaTable.delete(condition = expr("id % 2 == 0"))
>>> newData = spark.range(0, 20)
>>> deltaTable.alias("oldData").merge(newData.alias("newData"),"oldData.id = newData.id").whenMatchedUpdate(set = { "id": col("newData.id") }).whenNotMatchedInsert(values = { "id": col("newData.id") }).execute()
>>> deltaTable.toDF().show()
+---+
| id|
+---+
| 9|
| 4|
| 18|
| 17|
| 6|
| 3|
| 8|
| 2|
| 10|
| 7|
| 12|
| 11|
| 1|
| 16|
| 19|
| 15|
| 0|
| 5|
| 13|
| 14|
+---+

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值