복붙노트

[SCALA] 파티션에 행을 변환하는 방법

SCALA

파티션에 행을 변환하는 방법

나는 불꽃의 시나리오를 가지고있다. 파티션 데이터 프레임에 있습니다. 수득 한 번에 각 파티션에 의해 처리되어야한다.

List<String> data = Arrays.asList("con_dist_1", "con_dist_2", 
        "con_dist_3", "con_dist_4", "con_dist_5",
        "con_dist_6");
Dataset<Row> codes = sparkSession.createDataset(data, Encoders.STRING());
Dataset<Row> partitioned_codes = codes.repartition(col("codes"));

// I need to paritition it dues to functional requirement
partitioned_codes.foreachPartition(itr -> {
    if (itr.hasNext()) {
        Row inrow = itr.next();
        System.out.println("inrow.length : " + inrow.length());
        System.out.println(inrow.toString());
        List<Object> objs = inrow.getList(0);
    }
});

가져 오기 오류

Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to scala.collection.Seq
    at org.apache.spark.sql.Row$class.getSeq(Row.scala:283)
    at org.apache.spark.sql.catalyst.expressions.GenericRow.getSeq(rows.scala:166)
    at org.apache.spark.sql.Row$class.getList(Row.scala:291)
    at org.apache.spark.sql.catalyst.expressions.GenericRow.getList(rows.scala:166)

질문 :   어떻게 여기 foreachPartition을 처리하기 위해, 각각의 반복은 행의 그룹을 구성 곳 ITR, 어떻게 ITR를 사용하는 행을 얻으려면?

해결법

    from https://stackoverflow.com/questions/60485240/how-to-convert-row-in-partition by cc-by-sa and MIT license