Spark - итерация между наборами данных без сбора данных - PullRequest
0 голосов
/ 28 февраля 2019

В определенный момент моего кода у меня есть два разных типизированных набора данных.Мне нужны данные от одного для фильтрации данных к другому.Предполагая, что нет способа изменить код с этого момента, есть ли способ сделать то, что я описываю в комментарии ниже, не собирая все данные из report2D и использовать их внутри функции Spark?

Dataset<Report1> report1Ds ...
Dataset<Report2> report2Ds ...

report1Ds.map((MapFunction<Report3>) report -> {

String company = report.getCompany();
// get data from report2Ds where report2.getEmployeer().equals(company);

}, kryo(Report3.class));

Будем очень благодарны за любые предложения или даже помощь в улучшении дизайна, чтобы избежать подобных случаев.

1 Ответ

0 голосов
/ 28 февраля 2019

Без изменения вашего подхода нет!Это невозможно, поскольку внутри блока карты вы не можете напрямую использовать абстракции драйвера (наборы данных, кадры данных или контекст Spark).Пожалуйста, обратитесь к следующим ссылкам для получения дополнительной информации:

Apache Spark: когда не использовать mapPartition и foreachPartition?

Причина: java.lang.NullPointerExceptionat org.apache.spark.sql.Dataset

Другой подход будет заключаться в том, чтобы определить поля связывания между двумя наборами данных, соединить их (иначе как report1Ds.join(report2Ds, report1Ds.company == report2Ds.employeer) в соответствии с вашим примером), а затем применитьфильтры в отношении логики, которую вы хотите.

...