Phoenix-Spark API是否有像HBase API这样的checkAndPut方法?

时间:2015-07-09 06:04:40

标签: hadoop apache-spark hbase phoenix

我正在使用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吗?

1 个答案:

答案 0 :(得分:0)

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