下面的代码介绍了如何将javardd< integer>转换为Dataframe或数据集

iq0todco  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(541)
  1. public static void main(String[] args) {
  2. SparkSession sessn = SparkSession.builder().appName("RDD2DF").master("local").getOrCreate();
  3. List<Integer> lst = Arrays.asList(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
  4. Dataset<Integer> DF = sessn.createDataset(lst, Encoders.INT());
  5. System.out.println(DF.javaRDD().getNumPartitions());
  6. JavaRDD<Integer> mappartRdd = DF.repartition(3).javaRDD().mapPartitions(it-> Arrays.asList(JavaConversions.asScalaIterator(it).length()).iterator());
  7. }

从上面的代码中,我无法将javardd(mappartrdd)转换为javaspark中的Dataframe。我使用下面的代码将javardd转换为dataframe/dataset。

  1. sessn.createDataFrame(mappartRdd, beanClass);

我为createdataframe尝试了多个选项和不同的重载函数。我面临着将其转换为df的问题。我需要提供什么beanclass才能让代码正常工作?
与scala不同,java中没有todf()这样的函数可以将rdd转换为Dataframe。有没有人能按我的要求帮我改装一下。
注意:我可以通过修改上面的代码直接创建一个数据集,如下所示。

  1. Dataset<Integer> mappartDS = DF.repartition(3).mapPartitions(it-> Arrays.asList(JavaConversions.asScalaIterator(it).length()).iterator(), Encoders.INT());

但是我想知道,如果我使用createdataframe,为什么我的javardd没有转换成df/ds。任何帮助都将不胜感激。

sg24os4d

sg24os4d1#

这似乎是这个问题的后续
我想,你是在学习阶段的Spark。我建议您了解java提供的API-https://spark.apache.org/docs/latest/api/java/index.html
关于你的问题,如果你检查 createDataFrame api,如下所示-

  1. def createDataFrame(rowRDD: JavaRDD[Row], schema: StructType): DataFrame = {
  2. ...
  3. }

如你所见,这需要时间 JavaRDD[Row] 相关的 StructType 架构为args。因此要创造 DataFrame 等于 Dataset<Row> 使用下面的代码段-

  1. JavaRDD<Integer> mappartRdd = DF.repartition(3).javaRDD().mapPartitions(it-> Arrays.asList(JavaConversions.asScalaIterator(it).length()).iterator());
  2. StructType schema = new StructType()
  3. .add(new StructField("value", DataTypes.IntegerType, true, Metadata.empty()));
  4. Dataset<Row> df = spark.createDataFrame(mappartRdd.map(RowFactory::create), schema);
  5. df.show(false);
  6. df.printSchema();
  7. /**
  8. * +-----+
  9. * |value|
  10. * +-----+
  11. * |6 |
  12. * |8 |
  13. * |6 |
  14. * +-----+
  15. *
  16. * root
  17. * |-- value: integer (nullable = true)
  18. */
展开查看全部

相关问题