我正在使用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吗?
答案 0 :(得分:0)
Approach1:
在这种情况下,您应该检查该行是否存在。如果该行存在,则从数据框中删除CREATED_DATE列
Approach2:
如果您无法从数据框中删除CREATED_DATE列,那么您需要编写一个prePut协处理器,它将在对区域服务器执行任何放置之前运行。这个appraoch会稍微困难一些。所以,我会建议第一种方法。