Java 我可以转换RDD吗<;POJO>;是否可以将这些POJO写入具有与POJO相同属性名称的表中?

Java 我可以转换RDD吗<;POJO>;是否可以将这些POJO写入具有与POJO相同属性名称的表中?,java,apache-spark,Java,Apache Spark,根据对的回复,我了解到Dataframe是Dataset的别名 我目前计算了一个javapairdd,其中CityStatistics是一个POJO,包含成员的getter和setter,比如:getCityCode(),getCityName(),getNumberOfSalaried(),getNumberOfCompanies() Liquibase脚本创建了一个统计表,其中存在这些字段(CITYCODE,CITYNAME,ACTIVITYCODE…)。我只需要写记录 从我的JavaPai

根据对的回复,我了解到
Dataframe
Dataset
的别名

我目前计算了一个
javapairdd
,其中
CityStatistics
是一个POJO,包含成员的getter和setter,比如:
getCityCode()
getCityName()
getNumberOfSalaried()
getNumberOfCompanies()

Liquibase
脚本创建了一个统计表,其中存在这些字段(
CITYCODE
CITYNAME
ACTIVITYCODE
…)。我只需要写记录

从我的
JavaPairdd citiesStatisticsRDD
,有什么(或在此之前:有什么)干净的方法来做这样的事情吗?
citiesStatisticsRDD.values()
=>
DataSet
=>
DataSet(=DataFrame)
=>是否通过DataFrame方法在JDBC连接上写入


谢谢

首先,您必须将JavaPairRDD转换为RDD,因为
。createDataset()接受RDD而不是JavaRDD
JavaRDD
是RDD的包装器,目的是简化java代码的调用。它内部包含RDD,可以使用.RDD()访问

JavaRDD cityRDD=citiesStatisticsRDD.map(x->x.。\u2);
Dataset cityDS=sqlContext.createDataset(cityRDD.rdd(),Encoders.bean(CityStatistics.class))
现在,如果您希望将整个citiesStatisticsRDD转换为Dataset:将JavaPairRDD转换为RDD,然后使用编码器

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

非常感谢!但是数据集中的表列最终是如何创建的呢?我是否应该调用
.toDF(“CITYCODE”、“CITYNAME”、“ACTIVITYCODE”、…)
而不是
.toDF(“key”、“value”)
?最后,我想通过一个
cityDS.write.format(“jdbc”).option(…).save()来结束我的操作。行吗?我无法理解如何在
数据集
数据集
之间进行映射:如何.toDF()在pojo getter方法名称和表列名之间进行匹配。此处(“键”、“值”)将作为dataframe架构中的根列。我们已经为列提供了编码器,不需要这样做。您只需使用
toDF()
Dataset<Row> cityDS = sqlContext.createDataset(citiesStatisticsRDD.values().rdd(), Encoders.bean(CityStatistics.class)).toDF();