使用Spark截断Kudu表

时间:2018-04-24 16:18:59

标签: apache-spark truncate apache-kudu

从spark中截断kudu表的最佳方法是什么?是否有任何类似的SQL" TRUNCATE TABLE_NAME;"或者"从TALBE_NAME删除;"?

我只是设法找到kuduContext.deleteRows,但它需要删除明确的规范行。

或者我应该使用KuduClient而不是Spark进行此类操作?

1 个答案:

答案 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连接