Nous avons besoin de calculer la matrice de distance comme jaccard sur l'énorme collection de Dataset dans l'étincelle. Face à deux problèmes. Veuillez nous aider à donner des instructions.Utiliser la fonction de carte dans Apache Spark pour un fonctionnement énorme
Edition 1
import info.debatty.java.stringsimilarity.Jaccard;
//sample Data set creation
List<Row> data = Arrays.asList(
RowFactory.create("Hi I heard about Spark", "Hi I Know about Spark"),
RowFactory.create("I wish Java could use case classes","I wish C# could use case classes"),
RowFactory.create("Logistic,regression,models,are,neat","Logistic,regression,models,are,neat"));
StructType schema = new StructType(new StructField[] {new StructField("label", DataTypes.StringType, false,Metadata.empty()),
new StructField("sentence", DataTypes.StringType, false,Metadata.empty()) });
Dataset<Row> sentenceDataFrame = spark.createDataFrame(data, schema);
// Distance matrix object creation
Jaccard jaccard=new Jaccard();
//Working on each of the member element of dataset and applying distance matrix.
Dataset<String> sentenceDataFrame1 =sentenceDataFrame.map(
(MapFunction<Row, String>) row -> "Name: " + jaccard.similarity(row.getString(0),row.getString(1)),Encoders.STRING()
);
sentenceDataFrame1.show();
Aucune erreur de temps de compilation. Mais faire exception temps d'exécution comme:
org.apache.spark.SparkException: Tâche non sérialisable
Numéro 2
De plus, nous devons trouver la paire est d'avoir plus de points pour lesquels nous avons besoin de déclarer certains variables Nous devons également effectuer d'autres calculs, nous sommes confrontés à beaucoup de difficultés.
Même si j'essaie de déclarer une variable simple comme compteur dans MapBlock, nous ne sommes pas en mesure de capturer la valeur incrémentée. Si nous déclarons en dehors du bloc Map, nous recevons beaucoup d'erreurs de compilation.
int counter=0;
Dataset<String> sentenceDataFrame1 =sentenceDataFrame.map(
(MapFunction<Row, String>) row -> {
System.out.println("Name: " + row.getString(1));
//int counter = 0;
counter++;
System.out.println("Counter: " + counter);
return counter+"";
},Encoders.STRING()
);
S'il vous plaît nous donne des indications. Merci.