根据对Convert Spark DataFrame to Pojo Object的回复,我了解到Dataframe
是Dataset<Row>
的别名。
我当前计算了一个JavaPairRDD<CityCode, CityStatistics>
,其中CityStatistics
是一个POJO,其中包含诸如getCityCode()
,getCityName()
,getActivityCode()
,{{1 }},getNumberOfSalaried()
...
getNumberOfCompanies()
脚本创建了一个统计表,其中存在这些字段(Liquibase
,CITYCODE
,CITYNAME
...)。我只需要写记录。
从我的ACTIVITYCODE
做类似的事情的(或之前有什么)干净的方法是什么?
JavaPairRDD<CityCode, CityStatistics> citiesStatisticsRDD
=> citiesStatisticsRDD.values()
=> DataSet<CityStatistics>
=>通过数据帧方法在JDBC连接上写吗?
谢谢!
答案 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();