У меня есть задание Spark, которое читает файл паркета с примерно 150 000 000 записей ключ/значение.
SparkConf conf = new SparkConf();
conf.setAppName("Job");
JavaSparkContext jsc = new JavaSparkContext(conf);
SQLContext sql = new SQLContext(jsc);
DataFrame df = sql.read().parquet(path);
Моя цель - записать пары ключ/значение в HBase, но у меня возникают проблемы с памятью, и я подозреваю, что это не лучший способ сделать это. Я хотел бы перенести вычисления в кластер, но не могу понять, как пропустить часть сбора. Прямо сейчас мой код выглядит так:
HBaseClient client = HbaseWrapper.initClient();
df.collectAsList().stream().forEach(row -> {
try {
HbaseWrapper.putRows(client, row);
} catch (Exception e) {
e.printStackTrace();
}
});
jsc.stop();
И я попытался сначала собрать в виде списка без потоковой передачи, а затем записать это, но это также занимает вечность.
Любые идеи приветствуются.