Как пройти / перебрать набор данных в Spark Java?

Я пытаюсь пройти через набор данных, чтобы выполнить некоторые вычисления сходства строк, такие как Яро Винклер или Косинусное сходство. Я конвертирую свой набор данных в список строк, а затем перехожу с помощью оператора for, который не является эффективным способом сделать это. Так что я с нетерпением жду лучшего подхода в Spark.

public class sample {

    public static void main(String[] args) {
        JavaSparkContext sc = new JavaSparkContext(new SparkConf().setAppName("Example").setMaster("local[*]"));
        SQLContext sqlContext = new SQLContext(sc);
        SparkSession spark = SparkSession.builder().appName("JavaTokenizerExample").getOrCreate();

        List<Row> data = Arrays.asList(RowFactory.create("Mysore","Mysuru"),
                RowFactory.create("Name","FirstName"));
        StructType schema = new StructType(
                new StructField[] { new StructField("Word1", DataTypes.StringType, true, Metadata.empty()),
                        new StructField("Word2", DataTypes.StringType, true, Metadata.empty()) });

        Dataset<Row> oldDF = spark.createDataFrame(data, schema);
        oldDF.show();
        List<Row> rowslist = oldDF.collectAsList(); 
    }
}

Я нашел много примеров JavaRDD, которые мне непонятны. Пример набора данных мне очень поможет.


person Abhishek Vk    schedule 13.03.2017    source источник


Ответы (2)


Вы можете использовать org.apache.spark.api.java.function.ForeachFunction, как показано ниже.

oldDF.foreach((ForeachFunction<Row>) row -> System.out.println(row));
person abaghel    schedule 13.03.2017

Для старых java jdks, которые не поддерживают лямбда-выражения, вы можете использовать следующее после импорта:

import org.apache.spark.api.java.function.VoidFunction;

yourDataSet.toJavaRDD().foreach(new VoidFunction<Row>() {
        public void call(Row r) throws Exception {
            System.out.println(r.getAs("your column name here"));
        }
    });
person DigitalFox    schedule 30.07.2019