Все строки раздела находятся в itr
. Поэтому, когда вы звоните itr.next()
, вы получаете только первый ряд. Если вам нужно распечатать все строки, вы можете использовать while
l oop, или вы можете преобразовать итератор в список с чем-то вроде этого (я подозреваю, что это то, что вы хотели получить):
partitioned_codes.foreachPartition(itr -> {
Iterable<Row> rowIt = () -> itr;
List<String> objs = StreamSupport.stream(rowIt.spliterator(), false)
.map(row -> row.getString(0))
.collect(Collectors.toList());
System.out.println("inrow.length: " + objs.size());
System.out.println(objs);
});
Пример кода, который вы разместили, не скомпилирован для меня, поэтому вот версия, с которой я тестировал:
List<String> data = Arrays.asList("con_dist_1", "con_dist_2",
"con_dist_3", "con_dist_4", "con_dist_5",
"con_dist_6");
StructType struct = new StructType()
.add(DataTypes.createStructField("codes", DataTypes.StringType, true));
Dataset<Row> codes = sparkSession.createDataFrame(sc.parallelize(data, 2)
.map(s -> RowFactory.create(s)), struct);
Dataset<Row> partitioned_codes = codes.repartition(org.apache.spark.sql.functions.col("codes"));
partitioned_codes.foreachPartition(itr -> {
Iterable<Row> rowIt = () -> itr;
List<String> objs = StreamSupport.stream(rowIt.spliterator(), false)
.map(row -> row.getString(0))
.collect(Collectors.toList());
System.out.println("inrow.length: " + objs.size());
System.out.println(objs);
});