0

我正在使用 Spark 1.3、HBase 1.1 和 Phoenix 4.4。我的代码中有这个:

val dataframe = sqlContext.createDataFrame(rdd, schema)
dataframe.save("org.apache.phoenix.spark", SaveMode.Overwrite,
    Map("table" -> "TEST_SCHEMA.TEST_HTABLE", "zkUrl" -> zkQuorum))

CREATED_DATE 在数据框中始终设置为 DateTime.now()。

如果 HBase 中已存在该行,我不希望更新该字段,但其他字段中有更新。

我可以使用 HBase 的 checkAndPut 来实现它:放置所有字段并在 created_date 字段上使用 checkAndPut。

但是如何使用 Phoenix-Spark API 做到这一点?我应该改用 HBase API 吗?

4

1 回答 1

0

Approach1:在这种情况下,您应该检查该行是否存在。如果该行存在,则从您的数据框中删除 CREATED_DATE 列。
Approach2:如果您无法从数据框中删除 CREATED_DATE 列,那么您将需要编写一个 prePut 协处理器,该处理器将在区域服务器上执行任何放置之前运行。这种方法会稍微难一些。所以,我建议第一种方法。

于 2015-07-10T05:24:18.570 回答