Могу ли я преобразовать RDD <POJO>в Dataframe, чтобы я мог записать эти POJO в таблицу, имеющую те же имена атрибутов, что и POJO? - PullRequest
0 голосов
/ 09 января 2019

Согласно ответу, сделанному на Преобразование Spark DataFrame в объект Pojo Я узнал, что Dataframe - это псевдоним Dataset<Row>.

В настоящее время я вычислил JavaPairRDD<CityCode, CityStatistics>, где CityStatistics - это POJO, содержащий геттеры и сеттеры для таких членов, как: getCityCode(), getCityName(), getActivityCode(), getNumberOfSalaried(), getNumberOfCompanies() ...

Сценарий Liquibase создал таблицу статистики, в которой существуют эти поля (CITYCODE, CITYNAME, ACTIVITYCODE ...). Я просто должен написать записи.

Каков (или до этого: есть ли) чистый способ сделать что-то подобное из моего JavaPairRDD<CityCode, CityStatistics> citiesStatisticsRDD?
citiesStatisticsRDD.values() => DataSet<CityStatistics> => DataSet<Row> (= DataFrame) => записать в соединение JDBC с помощью метода dataframe?

Спасибо!

1 Ответ

0 голосов
/ 09 января 2019

Сначала вам нужно конвертировать JavaPairRDD в RDD, потому что .createDataset() accepts RDD<T> not JavaRDD<T>. JavaRDD - это оболочка для порядка RDD, чтобы упростить вызовы из кода Java. Он содержит RDD внутри и может быть доступен с помощью .rdd ()

JavaRDD cityRDD = citiesStatisticsRDD.map(x -> x._2);
Dataset<CityStatistics> cityDS =  sqlContext.createDataset(cityRDD.rdd(), Encoders.bean(CityStatistics.class))

Теперь, если вы хотите, чтобы целые городаStatisticsRDD были преобразованы в набор данных: преобразуйте JavaPairRDD в RDD, а затем используйте кодеры

Dataset<Row> cityDS = sqlContext.createDataset(citiesStatisticsRDD.values().rdd(), Encoders.bean(CityStatistics.class)).toDF();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...