我试图以有效的方式将Spark DataSet存储到HBase。当我们尝试在JAVA中使用lambda做类似的事情时:
sparkDF.foreach(l->this.hBaseConnector.persistMappingToHBase(l,"name_of_hBaseTable") );
函数persistMappingtoHBase使用HBase Java客户端(Put)存储在HBase中。
I get an exception: Exception in thread "main" org.apache.spark.SparkException: Task not serializable
然后我们尝试了这个:
sparkDF.foreachPartition(partition -> {
final HBaseConnector hBaseConnector = new HBaseConnector();
hBaseConnector.connect(hbaseProps);
while (partition.hasNext()) {
hBaseConnector.persistMappingToHBase(partition.next());
}
hBaseConnector.closeConnection();
});
这似乎工作但看起来效率很低,我猜是因为我们为数据帧的每一行创建并关闭了一个连接。
将火花DS存储到HBase的好方法是什么?我看到a connector developed by IBM但从未使用它。