我可以将RDD <pojo>转换为数据框,以便将这些POJO写入具有与POJO相同的属性名称的表中吗?

时间:2019-01-09 09:40:40

标签: java apache-spark

根据对Convert Spark DataFrame to Pojo Object的回复,我了解到DataframeDataset<Row>的别名。

我当前计算了一个JavaPairRDD<CityCode, CityStatistics>,其中CityStatistics是一个POJO,其中包含诸如getCityCode()getCityName()getActivityCode(),{{1 }},getNumberOfSalaried() ...

getNumberOfCompanies()脚本创建了一个统计表,其中存在这些字段(LiquibaseCITYCODECITYNAME ...)。我只需要写记录。

从我的ACTIVITYCODE做类似的事情的(或之前有什么)干净的方法是什么?
JavaPairRDD<CityCode, CityStatistics> citiesStatisticsRDD => citiesStatisticsRDD.values() => DataSet<CityStatistics> =>通过数据帧方法在JDBC连接上写吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

首先,由于.createDataset() accepts RDD<T> not JavaRDD<T>,必须将JavaPairRDD转换为RDD。JavaRDD是RDD的包装,以简化从Java代码的调用。它内部包含RDD,可以使用.rdd()

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

现在,如果您要将整个cityStatisticsRDD转换为数据集,请执行以下操作:将JavaPairRDD转换为RDD,然后使用编码器

Dataset<Row> cityDS = sqlContext.createDataset(citiesStatisticsRDD.values().rdd(), Encoders.bean(CityStatistics.class)).toDF();