apache-spark - 使用 Spark 截断 Kudu 表
问题描述
从火花中截断 kudu 表的最佳方法是什么?有没有类似 SQL "TRUNCATE TABLE_NAME;" 还是“从 TALBE_NAME 中删除;”?
我刚刚设法找到 kuduContext.deleteRows,但它需要明确的规范行才能删除。
或者我应该使用 KuduClient 而不是 Spark 进行此类操作?
解决方案
我在 KuduClient 中找不到任何截断表的操作。对于 kudu 删除行,必须明确提及 id。
如文档中所述,最简单的方法(使用最短的代码)是读取 id (或所有主键)作为数据框并将其传递给KuduContext.deleteRows
.
import org.apache.kudu.spark.kudu._
val kuduMasters = Seq("kudu_ubuntu:7051").mkString(",")
val tableName = "test_tbl"
val kuduContext = new KuduContext(kuduMasters, sc)
val df = spark.sqlContext.read.
options(Map("kudu.master" -> kuduMasters,
"kudu.table" -> tableName)).
kudu
val idToDelete = df.select("no") // contains ids for existing rows.
kuduContext.deleteRows(idToDelete, tableName) // delete rows
注意:我使用带有包的 spark-2org.apache.kudu:kudu-spark2_2.11:1.6.0
用于 kudu 连接
推荐阅读
- mysql - Laravel 获取用户不喜欢的帖子
- javascript - 单击元素外的任何位置时删除类
- umbraco - Umbraco 块列表未显示在数据类型列表中
- python - 在数据框 pandas 中使用 groupby 和自定义 agg
- rust - 如何选择或加入不同类型的期货?
- c# - Specflow 场景大纲 - 更改自动生成的测试名称
- java - Apple AWT 内部异常:NSWindow 拖动区域应该只在主线程上无效
- php - 特殊“特殊”字符支持 HTML(在电子邮件中)
- php - Laravel foreach json column query
- c# - Dapperplus add round to bulkinsert