从spark中截断kudu表的最佳方法是什么?是否有任何类似的SQL" TRUNCATE TABLE_NAME;"或者"从TALBE_NAME删除;"?
我只是设法找到kuduContext.deleteRows,但它需要删除明确的规范行。
或者我应该使用KuduClient而不是Spark进行此类操作?
答案 0 :(得分:0)
我在KuduClient中找不到用于截断表的任何操作。 对于kudu delete行,必须明确提及ID。
documentaion中提到的最简单的方法(具有最短的代码)是将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
注意:我使用带有包org.apache.kudu:kudu-spark2_2.11:1.6.0
的spark-2进行kudu连接