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();